IL中“specialname”和“rtspecialname”的目的和意义

时间:2015-12-01 17:57:56

标签: c# il ildasm

我现在正试图理解IL代码和C#内部,我写了一个简单的c#hello world程序,代码是:

using System;
class Program
{
    public static void Main()
    {
       Console.WriteLine("Hello World");
    }
}

这里是为Program class:

的构造函数生成的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 的含义和目的是什么?或者它们的用途是什么?

1 个答案:

答案 0 :(得分:5)

根据ECMA 355 standard

  

rtspecialname 表示此项的名称对CLI具有特殊意义。目前没有定义特殊类型名称;这是为了将来使用。标有 rtspecialname 的任何项目也应如此   标记为特殊名称

     

specialname 表示此项的名称对CLI以外的工具具有特殊意义。例如,参见Partition I。

这些属性由工具或运行时使用,以确定属性或方法是否具有特殊用途或重要性 - 一个示例(What other neat tricks does the SpecialNameAttribute allow?)用于标记操作符以防止与用户命名空间冲突。我在标准中看到的另一个是属性的getter和setter,看来你引用的Main方法是另一个例子。

虽然我将原始问题标记为重复,但这个问题在范围上略有不同,这里的答案可能会更加轻松。无论如何,我希望。