1

我一直在深入阅读有关委托的内容,令人困惑的是,具有一种方法的委托可能与多播委托不同。但是,通过反射,您可以清楚地看到,即使只有一个方法,委托确实是从 派生的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

我意识到 aMulticastDelegate包含Delegate对象的调用列表。我想知道是否可以Delegate直接创建一个,以及这样做是否有任何好处,除了单独调用GetInvocationList()和提取Delegate对象。

4

1 回答 1

7

并不真地。所有 .NET 委托都派生自MulticastDelegate. 最初编写 .NET 时,最初存在单播和多播之间的区别,但这种区别在发布之前就被删除了。但是,基础类型并未合并为一个。

您不能Delegate直接在 C# 中派生。您可能可以在原始 IL 中使用,但实际上并没有多大意义,因为 a 的MulticastDelegate操作就像对所有意图和目的的单播委托一样。

于 2013-04-25T16:38:21.510 回答