C# net中的基元类型
在.net中,AIUIC# 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?那么,我们如何避免循环定义呢?在迪欣的博客文章中有一个很好的解释
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之外,并且是.NETint
在汇编中的实际表示。好吧,我假设m_值必须引用它,但是我在codeNo中找不到任何证据,在C
中,int
是系统.int32
的语法糖。在VB.Net中,Integer
是System.Int32
的语法糖。他不是也这么说吗?@HimBromBeere-如果这是对我评论的回应,我想指出.Net!=这基本上是正确的。我想补充一点——这类CLR基本类型似乎在第II.7.1节类型中被列举,有趣的是包括字符串(为什么它不是char[]
?)的包装器——当您请求int或System.int32时,mcs似乎总是给您一个int32
。每当您需要在其上调用方法时,它都会使用CILconstrated.
前缀将其视为Int32。-我不能说,public enum Status:Int32{}
真的不是Int32不是原语的结果吗?CLR规范的另一个相关部分是I.8.2.2,它将mscorlib类型与CLR原语相关联