This question already has answers here:
Simple Delegate (delegate) vs. Multicast delegates
                                
                                    (6个答案)
                                
                        
                                5年前关闭。
            
                    
我一直在深入阅读有关委托的内容,令人困惑的是,使用一种方法的委托可能与多播委托不同。但是,通过反射,您可以清楚地看到,即使只有一种方法,委托的确确实是从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委托均源自MulticastDelegate。最初编写.NET时,单播和多播之间最初存在区别,但该区别在发布前已被删除。但是,基础类型没有合并为一个。

您不能直接在C#中从Delegate派生。您可能可以使用原始IL,但是没有太多意义,因为MulticastDelegate的运行方式像单播委托一样,可以实现所有意图和目的。

10-04 12:04