【问题标题】:Are C# extension methods only available for instance methods?C# 扩展方法是否仅可用于实例方法?
【发布时间】:2009-10-11 14:39:54
【问题描述】:

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

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

总结不。答案表明拥有它是合理的,但不太可能很快发生。解决方法将需要编辑创建新类或类似的东西,可能不值得。

【问题讨论】:

    标签: c# static extension-methods


    【解决方案1】:

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

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

    【讨论】:

    • @frou。谢谢。实际上,我正在创建一组自己的课程,因为我可能也必须走其他路。扩展类只是让它不可见!
    • 您应该遇到的唯一问题是,如果现有的同名 .net 类/方法不提供您需要的实现。但这应该是相当罕见的。
    【解决方案2】:

    很遗憾,C# 3.0 不允许创建静态扩展方法。然而,F#确实允许这样做,以及扩展属性非常需要的特性。

    【讨论】:

    【解决方案3】:

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

    所以简短的回答是不,永远不会!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-01
      • 1970-01-01
      • 2017-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多