10

我现在正在尝试专门了解 IL 代码和 C# 内部结构,我编写了一个简单的 c# hello world 程序,其代码是:

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

这是为类的构造函数生成的 IL Program

.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 的含义和用途它们用途是什么?

4

1 回答 1

9

根据ECMA 335 标准

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

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

工具或运行时使用这些属性来确定属性或方法是否具有特殊用途或意义 - 一个示例(SpecialNameAttribute 允许哪些其他巧妙技巧?)是标记运算符以防止与用户命名空间发生冲突。我在标准中看到的另一个是用于属性的 getter 和 setter,看来Main您引用的方法是另一个示例。


虽然我将原始问题标记为重复,但这个问题的范围略有不同,这里的答案可能会更清楚一些。我还是希望。

于 2015-12-01T18:11:29.817 回答