Дополнительные методы могут быть применены к интерфейсам?

Действительно ли возможно применить дополнительный метод к интерфейсу? (Вопрос о C#)

Это должно, например, достигнуть следующего:

  1. создайте интерфейс ITopology

  2. создайте дополнительный метод для этого интерфейса (например, общедоступный статический международный CountNodes (этот ITopology topologyIf))

  3. затем при создании класса (например, MyGraph), который реализует ITopology, затем он автоматически имел бы расширение Узлов количества.

Таким образом, классы, реализовывая интерфейс не должны были бы иметь имени класса набора для выравнивания с тем, что было определено в дополнительном методе.

115
задан Greg 5 May 2010 в 02:56
поделиться

1 ответ

Конечно, могут; большая часть Linq построена на методах расширения интерфейса.

Интерфейсы фактически были одной из движущих сил развития методов расширения; поскольку они не могут реализовать свои собственные функции, методы расширения - это самый простой способ связать реальный код с определениями интерфейсов.

См. Класс Enumerable для получения полной коллекции методов расширения, построенных на основе IEnumerable . Реализовать его можно так же, как реализовать его для класса:

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

В методах расширения нет ничего особенного в том, что касается интерфейсов; метод расширения - это просто статический метод, к которому компилятор применяет некоторый синтаксический сахар, чтобы он выглядел так, как будто метод является частью целевого типа.

178
ответ дан 24 November 2019 в 02:26
поделиться