我已经读到可以在 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/