在.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
参考自己?那么我们如何避免循环定义呢?
答案 0 :(得分:15)
Dixin的博客文章Understanding .NET Primitive Types中有一个很好的解释。
答案可以在生成的IL中找到。他的以下问题实际上就是你问题的答案:
那么int32(IL),int(C#)和System.Int32(C#)之间的关系是什么?
在IL中可以发现int
内的struct
是:
.field assembly int32 m_value
因此int32
实际上存在于.NET之外,并且是汇编中.NET int
的实际表示。