C#扩展方法仅适用于实例方法吗?

时间:2009-10-11 14:39:54

标签: c# static extension-methods

我最近开始有效地使用C#扩展方法。 SO示例和文档表明它们仅用于实例方法(即使用this关键字)。可以将它们(或其他方法)与静态/类方法一起使用吗?

(我的特殊要求是将Java代码转换为C#,其中“大多数代码”不需要编辑.Java实例方法(例如Java String.indexOf())可以通过调用C#{{1的扩展方法来路由}})。我想对Java string.IndexOf() =>做同样的事情。 C#Math.abs())。

摘要否。答案表明这样做是合理的,但不太可能很快发生。变通办法需要编辑创建新的类或类似的东西,可能不值得。

3 个答案:

答案 0 :(得分:3)

您无法创建静态扩展方法 - 这也是我希望能够做到的事情!

您可以使用标准后缀创建自己的静态类,即MathJSyntax.abs(..),它将调用Math.Abs​​(..)

答案 1 :(得分:1)

不幸的是,C#3.0不允许创建静态扩展方法。 F#然而 允许这一点,以及扩展属性所需的功能。

答案 2 :(得分:0)

符号本身不允许你这样做,“this”类参数需要传入类的实例。如果他们打算至少最终添加它,他们就不会这样写它

所以简短的答案是不存在的,永远不会是!