C# net中的基元类型

C# net中的基元类型,c#,.net,int,clr,primitive-types,C#,.net,Int,Clr,Primitive Types,在.net中,AIUIint只是System.Int32的语法糖,它是一个结构 csharp> typeof(System.Int32).IsPrimitive true csharp> typeof(System.Int32).Equals(typeof(int)) true 我在资料来源中看到: 该System.Int32只是参考本身是int的成员m_值定义的-这是如何工作的?我们肯定是在参照自身定义int?那么,我们如何避免循环定义呢?在迪欣的博客文章中有一个很好的解释

在.net中,AIUI
int
只是
System.Int32
的语法糖,它是一个
结构

csharp> typeof(System.Int32).IsPrimitive 
true
csharp> typeof(System.Int32).Equals(typeof(int))
true
我在资料来源中看到:


System.Int32
只是参考本身是
int
的成员
m_值定义的-这是如何工作的?我们肯定是在参照自身定义
int
?那么,我们如何避免循环定义呢?

在迪欣的博客文章中有一个很好的解释

答案可以在生成的IL中找到。他的以下问题实际上是对你问题的回答:

那么int32(IL)、int(C#)和System.int32(C#)之间的关系是什么呢

在IL中,可以发现
结构中的
int
是:

.field assembly int32 m_value

因此,
int32
实际上存在于.NET之外,并且是.NET
int
在汇编中的实际表示。

好吧,我假设m_值必须引用它,但是我在codeNo中找不到任何证据,在
C
中,
int
系统.int32
的语法糖。在VB.Net中,
Integer
System.Int32
的语法糖。他不是也这么说吗?@HimBromBeere-如果这是对我评论的回应,我想指出.Net!=这基本上是正确的。我想补充一点——这类CLR基本类型似乎在第II.7.1节类型中被列举,有趣的是包括字符串(为什么它不是
char[]
?)的包装器——当您请求int或System.int32时,mcs似乎总是给您一个
int32
。每当您需要在其上调用方法时,它都会使用CIL
constrated.
前缀将其视为Int32。-我不能说,
public enum Status:Int32{}
真的不是Int32不是原语的结果吗?CLR规范的另一个相关部分是I.8.2.2,它将mscorlib类型与CLR原语相关联