в принципе:
1. Суть делегирования — это указатель, указатель на функцию. Просто получите первый адрес функции;
Делегирование в C# повышает безопасность, что отражается в определении типа блока функциональных инструкций, на который ссылается указатель функции, например возвращаемого значения, типа параметра и количества параметров.
Когда указателю функции в C присваивается значение (в C# это происходит при создании экземпляра делегата, поскольку серверная часть C# обрабатывает делегат как класс и инкапсулирует его), удовлетворяет ли назначенное значение различным условиям типа (возвращаемое значение , тип параметра, количество параметров) не проверяются, и гарантия дается пользователем, а C# скомпилирует и предложит ее.
2. Процесс создания экземпляра делегата, то есть процесс создания объекта делегата, заключается в назначении адреса памяти существующего блока инструкций кода функции (статической функции, нестатической функции-члена экземпляра) этому делегату; Процесс назначения — это то, что делает делегированный конструктор. Следовательно, делегированный конструктор должен иметь параметр, который обрабатывается системой в фоновом режиме, который является указателем на функцию, удовлетворяющим проверке типа, и типом, который необходимо проверить (возвращаемое значение). , тип параметра, количество параметров) задаются при объявлении и определении делегата.
3. Два метода создания экземпляра делегата:
1) A a = новый A (имя статического метода/экземпляр. имя метода);
2) A a = имя статического метода/имя экземпляра.метода;
Два метода, вызываемые делегатами:
1) а.Вызов()
2)а()
Метод, используемый для создания делегата, может быть статическим методом или функцией-членом экземпляра объекта. Суть в том, что эта инструкция кода скомпилирована, память выделена и параметры переданы делегату (по сути, заголовку). данные этой инструкции) Адрес) является допустимым и значимым. С этой точки зрения естественные статические методы и методы экземпляра могут использоваться для конструирования и создания экземпляров делегата.