【问题标题】:Purpose and Meaning of "specialname" and "rtspecialname" in IL [duplicate]IL中“specialname”和“rtspecialname”的用途和含义[重复]
【发布时间】:2016-03-05 18:18:14
【问题描述】:

我现在正在尝试具体了解 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

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

【问题讨论】:

  • 这对我没有帮助,可能与此有关,但我正在为此寻找一个清晰而详细的答案

标签: c# il ildasm


【解决方案1】:

根据ECMA 335 standard

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

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

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


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

【讨论】:

  • 如果其他人像我一样密集,rt = "runtime."
猜你喜欢
  • 2016-01-23
  • 2011-05-31
  • 2014-09-14
  • 1970-01-01
  • 2017-07-07
  • 1970-01-01
  • 2017-03-26
  • 2021-03-29
  • 1970-01-01
相关资源
最近更新 更多