Примитивные типы в .net
В .net, AIUI int
является просто синтаксическим сахаром для System.Int32
, который является struct
.
csharp> typeof(System.Int32).IsPrimitive
true
csharp> typeof(System.Int32).Equals(typeof(int))
true
Я вижу в источнике:
https://github.com/mono/mono/blob/master/mcs/class/corlib/System/Int32.cs
http://referencesource.microsoft.com/#mscorlib/system/int32.cs
То, что System.Int32
определяется только ссылкой на элемент m_value
, который сам является int
- как это работает? Разумеется, мы определяем int
ссылкой на себя? Итак, как нам избежать кругового определения?
Ответы
Ответ 1
В статье Dixin в блоге есть отличное объяснение Общие сведения о примитивных типах .NET.
Ответ можно найти в сгенерированном ИЛ. Его следующий вопрос на самом деле является ответом на ваш вопрос:
Итак, какова связь между int32 (IL), int (С#) и System.Int32 (С#)?
В IL можно найти, что int
внутри struct
:
.field assembly int32 m_value
Итак, int32
фактически существует вне .NET и является фактическим представлением .NET int
в сборке.