Подтвердить что ты не робот

Примитивные типы в .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 ссылкой на себя? Итак, как нам избежать кругового определения?

4b9b3361

Ответ 1

В статье Dixin в блоге есть отличное объяснение Общие сведения о примитивных типах .NET.

Ответ можно найти в сгенерированном ИЛ. Его следующий вопрос на самом деле является ответом на ваш вопрос:

Итак, какова связь между int32 (IL), int (С#) и System.Int32 (С#)?

В IL можно найти, что int внутри struct:

.field assembly int32 m_value

Итак, int32 фактически существует вне .NET и является фактическим представлением .NET int в сборке.