public
public
public IAsyncResult BeginInvoke(
public
}
Базовые классы System.MulticastDelegate и System.Delegate
Таким образом, при создании типов c помощью) ключевого слова delegate в C# вы неявно объявляете тип класса, являющегося производным от System.MulticastDelegate. Этот класс обеспечивает своим потомкам доступ к списку с адресами тех методов, которые поддерживаются типом делегата, а также предлагает несколько дополнительных методов (и ряд перегруженных операций), обеспечивающих взаимодействие со списком вызовов. Вот программный код некоторых членов System.MulticastDelegate.
[Serializable]
public abstract class MulticastDelegate: Delegate {
// Методы
public sealed override Delegate[] GetInvocationList;
public static bool operator==(MulticastDelegate d1, MulticastDelegate d2);
public static bool operator!=(MulticastDelegate d1, MulticastDelegate d2);
// Поля
private IntPtr _invocationCount;
private object _invocationList;
}
Дополнительные функциональные возможности System.MulticastDelegate получает от своего родительского класса System.Delegate. Вот часть определения этого класса.
[Serializable, ClassInterface(ClassInterfaceType.AutoDual)]
public abstract class Delegate: ICloneable, ISerializable {
// Методы
public static Delegate Combine(params Delegate[] delegates);
public static Delegate Combine(Delegate a, Delegate b);
public static Delegate Remove(Delegate source, Delegate value);
public static Delegate RemoveAll(Delegate source, Delegate value);
// Перегруженные операции
public static bool operator==(Delegate d1, Delegate d2);
public static bool operator!=(Delegate d1, Delegate d2);
// Свойства
public MethodInfo Method {get;}
public object Target {get;}
}
Здесь следует подчеркнуть, что от вас никогда не потребуется непосредственно получать производные этих базовых классов, и вы можете ограничить себя использованием только членов, указанных в табл. 8.1.
Таблица 8.1.
Избранные члены System.MulticastDelegate и System.Delegate