Язык программирования C#9 и платформа .NET5. Страница 234
// Этот делегат может указывать на любой метод, который принимает// два целочисленных значения и возвращает целочисленное значение.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>);
Перейти на страницу:
Изменить размер шрифта: