Назначение и значение specialname и rtspecialname в IL

Я пытаюсь понять код IL и внутренние компоненты С#, особенно в настоящее время, я написал простую программу приветствия мира на С#, код которой:

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 или какая от них польза?


person Ehsan Sajjad    schedule 01.12.2015    source источник
comment
это мне не помогает, может быть это связано с этим, но я ищу четкий и подробный ответ на этот   -  person Ehsan Sajjad    schedule 01.12.2015


Ответы (1)


Согласно стандарту ECMA 335:

rtspecialname указывает, что имя этого элемента имеет особое значение для интерфейса командной строки. В настоящее время нет определенных имен специальных типов; это на будущее. Любой элемент с пометкой rtspecialname также должен быть помечен как specialname.

specialname указывает, что имя этого элемента может иметь особое значение для инструментов, отличных от CLI. См., например, Раздел I.

Эти атрибуты используются либо инструментами, либо средой выполнения, чтобы определить, имеет ли атрибут или метод специальное использование или значение — один пример (Какие еще хитрости позволяет использовать SpecialNameAttribute?) — пометить оператор для предотвращения коллизий с пространством имен пользователя. Еще один, который я вижу в стандарте, предназначен для получения и установки свойств, и похоже, что приведенный вами метод Main является еще одним примером.


Хотя я пометил исходный вопрос как дубликат, этот вопрос немного отличается по объему, и ответ здесь может пролить больше света. надеюсь во всяком случае.

person Dan Field    schedule 01.12.2015
comment
В случае, если кто-то еще такой же плотный, как я, rt = время выполнения. - person Daniel McLaury; 24.01.2017