我已经读过可以在F#中扩展静态类,尽管在C#中它是不可能的。提出了多种解决方法,因此建议这种类型的扩展可能相当有用。
虽然扩展方法被定义为静态,但它们适用于正在扩展的类型实例。
因为没有什么可以让我认为它现在可用,我想知道这个功能现在是否可以在.NET 4.0 +中使用C#中的扩展方法语法来扩展静态类?
答案 0 :(得分:3)
在合理的将来,C#中可能无法使用扩展方法扩充静态类,除非语言改变了声明扩展方法的方式。
想象一下,我们必须将此功能添加到该语言中。扩展方法目前定义为静态方法,使用this
关键字修饰的附加参数:
public class Foo
{
}
public static class ExtensionMethods
{
public static void ExtendFoo(this Foo foo, string bar)
{
}
}
在上面的代码中,this
装饰器是唯一指示编译器将ExtendFoo()
视为扩充类Foo
的扩展方法的东西。换句话说,我们无法摆脱参数foo
,它将引用扩展方法将应用的{em>实例Foo
,即等效于{{1如果该方法是this
的原生方法。问题是,静态类无法实例化,那么我们将在该参数中传递什么?
我们可以解决问题,并确定如果Foo
是静态的,那么编译器应该发出通过Foo
而不是null
的实际实例的代码(无论如何都不能存在) )。但这将是一个显而易见的问题,并且可能不应仅仅因为这个原因而成为语言的一部分。否则就会到达Foo
。