你能添加像静态方法一样调用的扩展方法吗?

4
根据微软的说法,“扩展方法是一种特殊的静态方法,但它们被称为扩展类型上的实例方法”。
有没有办法添加一个扩展方法,使其被称为静态方法呢?或者做些其他具有相同效果的事情?
编辑: 我的意思是“在扩展类上像静态方法一样调用”。 抱歉造成的歧义。

1
不,有一些讨论在 https://dev59.com/skbRa4cB1Zd3GeqP4dsR。 - Joe Daley
@Joe:"no" 指的是什么?请看下面的回答。 - Michael Petrotta
1
@Michael:我的意思是,C#不支持将扩展方法作为静态方法在目标类上调用。该链接讨论了为什么不支持这种方式。您可以在扩展类上静态地调用扩展方法,但我认为他是在问前者。 - Joe Daley
@Joe:明白了。是的,它可以被解释成两种方式,但我认为你在海报的实际问题上是正确的。 - Michael Petrotta
2个回答

13
根据微软的说法,“扩展方法是一种特殊类型的静态方法,但它们被称为在扩展类型上的实例方法”。
是的,扩展方法是静态方法。它们可以像普通静态方法一样被调用,也可以作为扩展实例方法在所“扩展”的类型上被调用,甚至可以在空引用上调用作为扩展方法。
例如:
public static class Extensions {
    public static bool IsNullOrEmpty(this string theString) {
        return string.IsNullOrEmpty(theString);
    }
}

// Code elsewhere.
string test = null;
Console.WriteLine(test.IsNullOrEmpty()); // Valid code.
Console.WriteLine(Extensions.IsNullOrEmpty(test)); // Valid code.

编辑:

有没有一种方法可以添加一个扩展方法,使其像静态方法一样被调用?

您的意思是您想调用,例如,string.MyExtensionMethod()吗?在这种情况下,不,没有办法做到这一点。


是的,我确实是这个意思。我直接理解了“对于用C#编写的客户端代码,在调用扩展方法和实际在类型中定义的方法之间没有明显区别”,并没有考虑到我可以在空引用上调用它们。 - Spike

4

扩展方法静态方法。你不需要做任何事情。

唯一区别扩展方法和其他静态方法的地方在于,它可以像实例方法一样被调用,除此之外,它也可以像普通的静态方法一样被调用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接