Primitive types in .net

∥☆過路亽.° 提交于 2019-12-09 14:54:51

问题


In .net, AIUI int is just syntactic sugar for System.Int32, which is a struct.

csharp> typeof(System.Int32).IsPrimitive 
true
csharp> typeof(System.Int32).Equals(typeof(int))
true

I see in the source:

https://github.com/mono/mono/blob/master/mcs/class/corlib/System/Int32.cs http://referencesource.microsoft.com/#mscorlib/system/int32.cs

That System.Int32 is just defined with reference to a member m_value that is itself an int - how does that work? Surely we're defining int with reference to itself? So how do we avoid circular definition then?


回答1:


There is an excellent explanation in Dixin's blog article Understanding .NET Primitive Types.

The answer can be found in the generated IL. His following question is actually the answer to your question:

So what is the relationship among int32 (IL), int (C#) and System.Int32 (C#)?

In the IL can be found that the int inside the struct is:

.field assembly int32 m_value

So that int32 actually exists outside .NET and is the actual representation of the .NET int in assembly.



来源:https://stackoverflow.com/questions/25009327/primitive-types-in-net

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!