为什么我不能在C#9中定义顶级扩展方法?

c#

c#-9.0

我曾认为在 C# 9中使用顶级语句功能本质上是将顶级代码包装在通常的Program类和Main方法中。

反编译的顶级程序如下所示:

[CompilerGenerated]
internal static class $Program
{
    private static void $Main(string[] args)
    {
        // top-level code here
    }
}

您可以在顶层定义普通方法。它们被编译到Program类中,但在Main方法之外,也可以在其中定义扩展方法。

因为生成的Program类是静态的和非泛型的,我希望能够在顶层定义扩展方法。但是,我收到编译器错误CS1106: Extension method must be defined in a non-generic static class

为什么是这样?

回答

在C#语言规范说:

当方法的第一个参数包含this修饰符时,该方法被称为扩展方法。扩展方法只能在非泛型、非嵌套的静态类中声明。

根据语言规范,扩展方法必须在静态类中声明

通过将顶级方法放置在隐藏的静态类中来实现它们并不重要。顶级方法(根据定义)未在任何类中声明,因此不能是根据规范的扩展方法。

与所有语言设计问题一样,这是因为这是语言设计团队设计语言的方式。据推测,阻止您在非静态类中定义扩展方法的相同问题也适用于顶级方法。

如果您希望有更多权限的人提供更多详细信息,您可以在csharplang 存储库中发起讨论或在 Gitter 上提问。

  • Discussion: https://github.com/dotnet/csharplang/discussions/4526

以上是为什么我不能在C#9中定义顶级扩展方法?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>