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

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

例如,实现以下目标:

  1. 创建一个 ITopology 接口

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

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

这样,实现接口的类就不必具有与扩展方法中定义的内容相对应的集合类名。

70561 次浏览

当然可以; Linq 的大部分都是围绕接口扩展方法构建的。

接口实际上是开发扩展方法的驱动力之一; 因为它们不能实现自己的任何功能,所以扩展方法是将实际代码与接口定义关联起来的最简单方法。

有关围绕 IEnumerable<T>构建的扩展方法的整个集合,请参见 数不胜数类。要实现一个类,就等同于为类实现一个类:

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

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