我现在特别想了解IL代码和C#内部,我写了一个简单的c#hello world程序,代码是:
using System; class Program { public static void Main() { Console.WriteLine("Hello World"); } }
这里是为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
我无法理解是什么的意义和目的specialname和rtspecialname或有什么用他们的?
根据ECMA 355标准:
rtspecialname表示该项目的名称对CLI具有特殊意义。当前没有定义的特殊类型名称;这是供将来使用。任何项目标rtspecialname也应标明specialname。
specialname表示该项目的名称对于CLI以外的工具可能具有特殊的意义。参见,例如,分区I。
工具或运行时使用这些属性来确定属性或方法是否具有特殊用途或重要性-一个示例(SpecialNameAttribute允许使用哪些其他巧妙的技巧?)是为了标记操作符以防止与用户名称空间冲突。我在标准中看到的另一个是属性的获取器和设置器,看来Main
您引用的方法是另一个示例。
尽管我将原始问题标记为重复,但该问题的范围略有不同,此处的答案可能会更加清楚。我还是希望。