Конечно, они могут; большая часть Linq построена на методах расширения интерфейса.
Интерфейсы были фактически одной из движущих сил для развития методов расширения; Так как они не могут реализовать какую-либо собственную функциональность, методы расширения являются самым простым способом связать реальный код с определениями интерфейса.
См. Класс Enumerable для всей коллекции методов расширения, построенных вокруг IEnumerable<T>
. Чтобы реализовать один, это то же самое, что реализовать один для класса:
public static class TopologyExtensions
{
public static void CountNodes(this ITopology topology)
{
// ...
}
}
Нет ничего особенного в методах расширения с точки зрения интерфейсов; метод расширения - это просто статический метод, к которому компилятор применяет некоторый синтаксический сахар, чтобы он выглядел так, как будто метод является частью целевого типа.