为什么我不能为静态类创建扩展方法?

时间:2010-03-07 23:49:46

标签: c# extension-methods static-classes

当我尝试为File类创建扩展方法时,我收到一个错误,告诉我我不能这样做,因为该类是静态的。但是,我不明白为什么这会停止创建扩展方法,有什么含义?

由于

4 个答案:

答案 0 :(得分:8)

在对象的实例上调用扩展方法。

myObj.ExtensionMethod();

如果您有静态类,则不能拥有它的实例。因此,没有什么可以调用扩展方法。

答案 1 :(得分:5)

因为extension method设计必须采用类的实例,它将作为第一个参数进行扩展。显然你不能传递File的实例,因为它是一个静态类,不能有实例。

答案 2 :(得分:5)

反过来说,如果查看definition of any extension method,第一个参数始终是this关键字所声明的对象实例。从逻辑上讲,这种行为不适用于静态类,因为没有实例存在。

扩展方法的示例 - 请参阅第一个参数

public static class MyExtensions
{
    public static int WordCount(this String str)
    {
        return str.Split(new char[] { ' ', '.', '?' }, StringSplitOptions.RemoveEmptyEntries).Length;
    }
}   

答案 3 :(得分:0)

  

为什么我不能为静态类创建扩展方法?

因为C#dev团队尚未实现该功能。 F# has chosen to implement it虽然。{/ p>

扩展属性也是如此。 F#有他们和Boo has had them since (at least) 2006