c#-4.0 - .NET 4.0+ 中是否可以使用扩展方法扩展静态类?

标签 c#-4.0 .net-4.0 extension-methods .net-4.5

我已经读到可以在 F# 中扩展静态类,尽管在 C# 中还不可能。提出了多种解决方法,因此建议这种类型的扩展可能相当有用。

尽管扩展方法被定义为静态,但它们适用于被扩展的类型实例。

因为没有什么让我认为它现在可用,我想知道现在是否可以使用 .NET 4.0+ 中的 C# 中的扩展方法语法扩展静态类?

最佳答案

在合理的 future ,在 C# 中使用扩展方法扩充静态类可能是不可能的,除非语言改变了扩展方法的声明方式。

想象一下,我们必须将此功能添加到语言中。扩展方法目前被定义为静态方法,它带有一个用 this 修饰的附加参数。关键词:

public class Foo
{
}

public static class ExtensionMethods
{
    public static void ExtendFoo(this Foo foo, string bar)
    {
    }
}

在上面的代码中,this装饰器是唯一指示编译器处理 ExtendFoo() 的东西作为增加类的扩展方法 Foo .换句话说,我们无法去掉参数 foo , 将引用 Foo 的实例扩展方法将应用到的,即等效于 this如果该方法是本地的 Foo .问题是,静态类不能被实例化,那么我们要传入那个参数呢?

如果Foo,我们可以解决问题并执行是静态的,那么编译器应该发出通过 null 的代码而不是 Foo 的实际实例(无论如何都不可能存在)。但这将是一个明显的困惑,并且可能不应该仅仅因为这个原因成为语言的一部分。期待 NullReferenceExceptions否则到处都是。

关于c#-4.0 - .NET 4.0+ 中是否可以使用扩展方法扩展静态类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8056705/

相关文章:

c# - 避免在应用程序中使用 GAC

c# - 为什么不能从扩展类型的基类中调用扩展方法?

c# - 在 C# 中创建通用接口(interface)

c# - doublevalue.ToString() 在 C# 中丢失小数位

c#-4.0 - 如何在 C# 中使用 LDAP 在 Active Directory 中添加新组

c# - 将 WCF 4 中的默认 JSON 序列化程序替换为 JSON.NET

.net - .NET 4.0运行时是否比.NET 2.0运行时慢?

.net - 在 2.0 运行时运行 .NET4 项目

c# - 使用 Razor 将 HtmlHelper 实例传递给另一个方法 MVC3

flutter - Dart扩展功能仅在与调用它的文件相同时可见