6

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

谢谢

4

4 回答 4

8

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

myObj.ExtensionMethod();

如果你有一个静态类,你就不能有它的实例。因此,没有什么可以调用扩展方法的。

于 2010-03-07T23:51:09.183 回答
5

因为设计的扩展方法必须将其扩展的类的实例作为其第一个参数。显然你不能传递 File 的实例,因为它是一个静态类并且不能有实例。

于 2010-03-07T23:51:36.517 回答
5

反过来说,如果您查看任何扩展方法的定义,第一个参数始终是调用它的对象的实例,由this关键字证明。从逻辑上讲,这种行为不能在静态类上起作用,因为不存在实例。

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

public static class MyExtensions
{
    public static int WordCount(this String str)
    {
        return str.Split(new char[] { ' ', '.', '?' }, StringSplitOptions.RemoveEmptyEntries).Length;
    }
}   
于 2010-03-07T23:53:10.003 回答
0

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

因为 C# 开发团队尚未实现该功能。F# 选择了实现它

扩展属性也是如此。F# 拥有它们,而Boo 从(至少)2006 年就拥有它们

于 2010-03-08T00:49:00.737 回答