Какова внутренняя реализация делегата в .NET?

Я понимаю, что объявление делегата выглядит примерно так:

public delegate int PerformCalculation(int x, int y);

Однако должно быть что-то еще. Назначение делегата - предоставить указатель на метод, и для этого вы инкапсулируете ссылку на метод в делегате.

В какой структуре содержится эта ссылка (внутри делегата)? Я также понимаю, что вы можете инкапсулировать ссылку на несколько методов в делегате. Означает ли это, что в делегате есть массив, который их хранит?

Также, какие методы определены в делегате и т. Д. Что на самом деле происходит, когда вы объявляете делегат с кратким:

public delegate int PerformCalculation(int x, int y);

?

РЕДАКТИРОВАТЬ: Некоторые пояснения. Когда вы объявляете делегата, компилятор автоматически создает запечатанный класс, который наследуется от System.MulticastDelegate для вас. Вы можете увидеть это, если посмотрите на свою сборку с помощью ildasm. Это изящно. По сути, с помощью одного оператора вы получаете полностью новый класс, сгенерированный для вас во время компиляции, и он имеет все необходимые вам функции.

18
задан richard 6 March 2011 в 10:58
поделиться