扩展方法可以应用于接口吗?

时间:2010-05-05 02:56:17

标签: c# .net interface extension-methods

是否可以将扩展方法应用于接口? (C#问题)

例如,这是为了实现以下目标:

  1. 创建ITopology界面

  2. 为此接口创建扩展方法(例如public static int CountNodes(this ITopology topologyIf))

  3. 然后在创建实现ITopology的类(例如MyGraph)时,它会自动拥有Count Nodes扩展名。

  4. 这样,实现接口的类就不必具有与扩展方法中定义的类对齐的set类名。

1 个答案:

答案 0 :(得分:167)

当然可以; Linq的大多数都是基于接口扩展方法构建的。

接口实际上是扩展方法发展的驱动力之一;由于它们无法实现任何自己的功能,因此扩展方法是将实际代码与接口定义相关联的最简单方法。

请参阅Enumerable课程,了解围绕IEnumerable<T>构建的一整套扩展方法。要实现一个,它与为类实现一个相同:

public static class TopologyExtensions
{
    public static void CountNodes(this ITopology topology)
    {
        // ...
    }
}

就接口而言,扩展方法没有什么特别的不同;扩展方法只是一个静态方法,编译器应用一些语法糖来使它看起来像方法是目标类型的一部分。