. net单委托与多播委托

本文关键字:多播 单委托 net | 更新日期: 2023-09-27 18:10:49

我一直在深入阅读一些关于委托的内容,令人困惑的是,具有一种方法的委托可能与多播委托不同。然而,通过反射,您可以清楚地看到,即使只有一个方法,委托确实是从MulticastDelegate派生的,而不是立即从Delegate对象派生的

class Program 
{
    public delegate void MyDelegate();
    static void SomeMethod()
    {
    }
    static void Main(string[] args)
    {
        MyDelegate del = null;
        del = new MyDelegate(SomeMethod);
        Console.WriteLine(del.GetType().BaseType.Name);            
        Console.ReadKey();
    }
}

输出:MulticastDelegate

我意识到MulticastDelegate包含Delegate对象的调用列表。我想知道是否有可能直接创建单个Delegate,以及这样做是否有任何优势,而不是单独调用GetInvocationList()并提取Delegate对象。

. net单委托与多播委托

不完全是。所有。net委托都派生自MulticastDelegate。当。net刚开始编写时,单个&多播,但是这个区别在发布之前就被去掉了。但是,基础类型没有合并为一个。

在c#中不能直接从Delegate派生。您可能能够在原始IL中,但没有太多意义,因为MulticastDelegate的操作就像所有意图和目的的单播委托。