我现在正试图理解IL代码和C#内部,我写了一个简单的c#hello world程序,代码是:
using System;
class Program
{
public static void Main()
{
Console.WriteLine("Hello World");
}
}
这里是为Program
class:
.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 的含义和目的是什么?或者它们的用途是什么?
答案 0 :(得分:5)
rtspecialname 表示此项的名称对CLI具有特殊意义。目前没有定义特殊类型名称;这是为了将来使用。标有 rtspecialname 的任何项目也应如此 标记为特殊名称。
specialname 表示此项的名称对CLI以外的工具具有特殊意义。例如,参见Partition I。
这些属性由工具或运行时使用,以确定属性或方法是否具有特殊用途或重要性 - 一个示例(What other neat tricks does the SpecialNameAttribute allow?)用于标记操作符以防止与用户命名空间冲突。我在标准中看到的另一个是属性的getter和setter,看来你引用的Main
方法是另一个例子。
虽然我将原始问题标记为重复,但这个问题在范围上略有不同,这里的答案可能会更加轻松。无论如何,我希望。