gpt4 book ai didi

c# - C# 中是否有不是 MulticastDelegate 的委托(delegate)?

转载 作者:太空狗 更新时间:2023-10-29 18:12:39 26 4
gpt4 key购买 nike

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

最佳答案

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

不能在 C# 中创建这样的委托(delegate)类型,但可以在 IL 中:

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

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

using System;

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

但是 CLR 在尝试加载它时会这样做:

Unhandled Exception: System.TypeLoadException: Could not load type 'Foo' from assembly 'Foo, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' because it cannot inherit directly from the delegate class. at Test.Main()

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

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

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com