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

我现在特别想了解IL代码和C#内部,我写了一个简单的c#hello world程序,代码是:

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

这里是为Program类的constuctor生成的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 

我无法理解specialnamertspecialname的含义和目的是什么或者它们的用途是什么?

根据ECMA 355标准 :

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

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

这些属性由工具或运行时使用,以确定属性或方法是否具有特殊用途或重要性 – 一个示例( SpecialNameAttribute允许的其他什么技巧? )是标记操作符以防止与用户命名空间冲突。 我在标准中看到的另一个是属性的getter和setter,看来你引用的Main方法是另一个例子。


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