Primitive types in .net

2019-04-04 04:27发布

问题:

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.