关于c#:可以将扩展方法应用于接口吗?

Can extension methods be applied to interfaces?

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

例如,实现以下目标:

  • 创建ITology接口

  • 为此接口创建扩展方法(例如public static int countnodes(this itopology topologyyif))。

  • 然后,当创建实现ITology的类(例如mygraph)时,它将自动具有count nodes扩展名。

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


    当然可以;大多数LINQ是围绕接口扩展方法构建的。

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

    有关围绕IEnumerable构建的扩展方法的完整集合,请参见Enumerable类。要实现一个,它与为类实现一个相同:

    1
    2
    3
    4
    5
    6
    7
    public static class TopologyExtensions
    {
        public static void CountNodes(this ITopology topology)
        {
            // ...
        }
    }

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