Полная версия книги - "Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю"
На этом ресурсе Вы можете бесплатно читать книгу онлайн Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю. Жанр: Базы данных . На сайте onlinechitalka.com Вы можете онлайн читать полную версию книги без регистрации и sms. Так же Вы можете ознакомится с содержанием, описанием, предисловием о произведении
// Этот делегат может указывать на любой метод, который принимает// два целочисленных значения и возвращает целочисленное значение.public delegate int BinaryOp(int x, int y);Когда компилятор C# обрабатывает тип делегата, он автоматически генерирует запечатанный (
sealedSystem.MulticastDelegateSystem.DelegateBinaryOpildasm.exe// -------------------------------------------------------// TypDefName: SimpleDelegate.BinaryOp// Extends : System.MulticastDelegate// Method #1// -------------------------------------------------------// MethodName: .ctor// ReturnType: Void// 2 Arguments// Argument #1: Object// Argument #2: I// Method #2// -------------------------------------------------------// MethodName: Invoke// ReturnType: I4// 2 Arguments// Argument #1: I4// Argument #2: I4// 2 Parameters// (1) ParamToken : Name : x flags: [none]// (2) ParamToken : Name : y flags: [none] //// Method #3// -------------------------------------------------------// MethodName: BeginInvoke// ReturnType: Class System.IAsyncResult// 4 Arguments// Argument #1: I4// Argument #2: I4// Argument #3: Class System.AsyncCallback// Argument #4: Object// 4 Parameters// (1) ParamToken : Name : x flags: [none]// (2) ParamToken : Name : y flags: [none]// (3) ParamToken : Name : callback flags: [none]// (4) ParamToken : Name : object flags: [none]//// Method #4// -------------------------------------------------------// MethodName: EndInvoke// ReturnType: I4 (int32)// 1 Arguments// Argument #1: Class System.IAsyncResult// 1 Parameters// (1) ParamToken : Name : result flags: [none]Как видите, в сгенерированном компилятором классе
BinaryOpInvoke()Invoke()Invoke()На заметку! Несмотря на то что методы
BeginInvoke()EndInvoke()Так благодаря чему же компилятор знает, как определять метод
Invoke()BinaryOpsealed class <b>BinaryOp</b> : System.MulticastDelegate{ public <b>int</b> Invoke(<b>int x, int y</b>);...}Первым делом обратите внимание, что параметры и возвращаемый тип для метода
Invoke()BinaryOpДавайте рассмотрим еще один пример. Предположим, что определен тип делегата, который может указывать на любой метод, возвращающий значение
stringSystem.Booleanpublic delegate string MyDelegate (bool a, bool b, bool c);На этот раз сгенерированный компилятором класс можно представить так:
sealed class <b>MyDelegate</b> : System.MulticastDelegate{ public <b>string</b> Invoke(<b>bool a, bool b, bool c</b>);