是否可以将扩展方法应用于接口? (C#问题)
例如,这是为了实现以下目标:
创建ITopology界面
为此接口创建扩展方法(例如public static int CountNodes(this ITopology topologyIf))
然后在创建实现ITopology的类(例如MyGraph)时,它会自动拥有Count Nodes扩展名。
这样,实现接口的类就不必具有与扩展方法中定义的类对齐的set类名。
答案 0 :(得分:167)
当然可以; Linq的大多数都是基于接口扩展方法构建的。
接口实际上是扩展方法发展的驱动力之一;由于它们无法实现任何自己的功能,因此扩展方法是将实际代码与接口定义相关联的最简单方法。
请参阅Enumerable课程,了解围绕IEnumerable<T>
构建的一整套扩展方法。要实现一个,它与为类实现一个相同:
public static class TopologyExtensions
{
public static void CountNodes(this ITopology topology)
{
// ...
}
}
就接口而言,扩展方法没有什么特别的不同;扩展方法只是一个静态方法,编译器应用一些语法糖来使它看起来像方法是目标类型的一部分。