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