我认为答案是否定的?如果没有,为什么我们将DelegateMulticastDelegate类分开?也许又是因为“其他一些.NET语言”吗?

最佳答案

编辑:我认为这是ECMA 335的一部分,但是我在任何地方都看不到它。

您无法在C#中创建此类委托(delegate)类型,但可以在IL中创建:

.class public auto ansi sealed Foo
       extends [mscorlib]System.Delegate
{
    // Body as normal
}

使用这样的委托(delegate),C#编译器没有问题:
using System;

class Test
{
    static void Main()
    {
        Foo f = x => Console.WriteLine(x);
        f("hello");
    }
}

但是CLR在尝试加载时会执行以下操作:



基本上,Delegate/MulticastDelegate分离是历史事故。我相信早期的alpha/beta版本确实可以区分,但是事实证明它太困惑了,通常没有用-因此现在每个委托(delegate)都派生自MulticastDelegate。

(有趣的是,C#规范在不能用作通用约束的类型列表中仅提及一次MulticastDelegate。)

关于c# - 在C#中是否有一个不是MulticastDelegate的委托(delegate)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4711118/

10-10 02:43