Я пытаюсь понять магию, происходящую за экраном в Пользовательском делегате, особенно в точке конструктора. Посмотрев внутри ключевого слова делегата с помощью отражателя Jet Brains, вы получите конструктор для автоматически сгенерированного класса , как показано в следующем коде IL:
.method public hidebysig specialname rtspecialname instance void
.ctor
(
object 'object',
native int 'method'
) runtime managed
{}
Если мы посмотрим на конструктор базового класса MulticastDelegate
, этот конструктор будет отличаться от описанного выше в случае типа параметров .
Смотрите следующий код IL:
.method family hidebysig specialname rtspecialname instance void
.ctor
(
object target,
string 'method'
) cil managed
.maxstack 8
// [30 7 - 30 38]
IL_0000: ldarg.0 // this
IL_0001: ldarg.1 // target
IL_0002: ldarg.2 // 'method'
IL_0003: call instance void System.Delegate::.ctor(object, string)
IL_0008: ret
} // end of method MulticastDelegate::.ctor
string 'method'
не существует в автоматически сгенерированном конструкторе класса.
, поскольку параметр native int 'method'
представляет адрес метода с использованием IntPtr
struct (из моего текущего понимания делегатов), я не вижу никакой связи между этим значением и строкой 'name'.
Я смотрю в Microsoft Docs о MulticastDelegate Constructors Я видел, что эта строка представляет имя метода , а не его адрес
method String
Имя метода, для которого создается делегат.
также искал здесь об этой точке, но я не смог найти конкретный ответ на эту разницу, вместо этого я нашел кое-что интересное из Jon skeet в этом Вопросе о конструкторах делегатов, как показано:
Хотя в большинстве случаев делегаты представляются просто другим типом пользовательского класса, они жестко контролируются. Реализации методов предоставляются VES, а не кодом пользователя. Единственными дополнительными членами, которые могут быть определены в типах делегатов, являются статические или методы экземпляра.
Я предполагаю, что во время выполнения компилятором VES происходит много вещей (согласно скиту), которые не могут быть видны отражателем.
Я немного озадачен этим моментом, в моей голове много возможностей, и я не знаю, прав я или нет. Кто-нибудь может дать мне причину этого изменения?!