Я просто опубликую здесь, поскольку некоторые другие сообщения немного неточны в отношении C #.
Правильно: int
- это псевдоним для System.Int32
.
Неправильно: float
- это псевдоним не для System.Float
, а для System.Single
По сути, int является зарезервированным ключевым словом в языке программирования C # и является псевдонимом для типа значения System.Int32
.
Однако float и Float - это не одно и то же, поскольку правильный системный тип для '' float
'' - System.Single. Есть некоторые типы, подобные этому, с зарезервированными ключевыми словами, которые, похоже, не соответствуют именам типов напрямую.
В C # нет разницы между '' int
'' и '' System.Int32
'' или любыми другими парами или ключевыми словами / типами системы, за исключением определения перечислений. С помощью перечислений вы можете указать размер используемого хранилища, и в этом случае вы можете использовать только зарезервированное ключевое слово, а не имя типа среды выполнения системы.
Будет ли значение в int будет сохранено в стеке, в памяти или как объект кучи, на который имеется ссылка, зависит от контекста и того, как вы его используете.
Это объявление в методе:
int i;
определяет переменную i
типа System.Int32
, находящуюся в регистре или в стеке, в зависимости от оптимизации. То же объявление в типе (структуре или классе) определяет поле члена. То же объявление в списке аргументов метода определяет параметр с теми же параметрами хранения, что и для локальной переменной. (обратите внимание, что этот абзац недействителен, если вы начинаете втягивать методы итератора в микс, это вообще разные звери)
Чтобы получить объект кучи, вы можете использовать бокс:
object o = i;
это создаст коробочную копию содержимого i
в куче. В IL вы можете напрямую обращаться к методам объекта кучи, но в C # вам нужно вернуть его к типу int, который создаст еще одну копию. Таким образом, объект в куче не может быть легко изменен в C # без создания новой упакованной копии нового значения int. (Ух, этот абзац не так легко читать.)
person
Lasse V. Karlsen
schedule
04.08.2008