我现在特别想了解IL代码和C#内部,我写了一个简单的c#hello world程序,代码是:
using System;
class Program
{
public static void Main()
{
Console.WriteLine("Hello World");
}
}
Run Code Online (Sandbox Code Playgroud)
这里是为Program类的构造函数生成的IL :
.method public hidebysig specialname rtspecialname
instance void .ctor() cil managed
{
// Code size 7 (0x7)
.maxstack 8
IL_0000: ldarg.0
IL_0001: call instance void [mscorlib]System.Object::.ctor()
IL_0006: ret
} // end of method Program::.ctor
Run Code Online (Sandbox Code Playgroud)
我无法理解是什么的意义和目的specialname和rtspecialname或有什么用他们的?
根据ECMA 355标准:
rtspecialname表示该项目的名称对CLI具有特殊意义。当前没有定义的特殊类型名称;这是供将来使用。任何项目标rtspecialname也应标明specialname。
specialname表示该项目的名称对于CLI以外的工具可能具有特殊的意义。参见,例如,分区I。
工具或运行时使用这些属性来确定属性或方法是否具有特殊用途或重要性-一个示例(SpecialNameAttribute允许使用哪些其他巧妙的技巧?)是为了标记操作符以防止与用户名称空间冲突。我在标准中看到的另一个是属性的获取器和设置器,看来Main您引用的方法是另一个示例。
尽管我将原始问题标记为重复,但该问题的范围略有不同,此处的答案可能会更加清楚。我还是希望。
| 归档时间: |
|
| 查看次数: |
1521 次 |
| 最近记录: |