Класс наследует интерфейс или реализует интерфейс? - PullRequest
0 голосов
/ 13 февраля 2019

Поскольку C # использует один и тот же синтаксис для наследования и реализации, то есть ':'.Говорим ли мы, что класс реализует интерфейс или наследует интерфейс?Может ли класс наследовать что-либо от интерфейса?

Ответы [ 4 ]

0 голосов
/ 13 февраля 2019

Классы всегда реализуют интерфейсы и никогда не наследуют ничего от интерфейсов, но интерфейсы могут наследовать другие интерфейсы.

Давайте посмотрим на приведенный ниже пример. Здесь я определил два интерфейса ISum и IMinus соответственно.

Наследование интерфейсов: ISum наследуется в IMinus.

Реализация интерфейсов: IMinus реализован в FooClass.

public interface ISum
{
    int Sum(int a, int b);
}

public interface IMinus : ISum
{
    int Minus(int a, int b);
}

public class FooClass: IMinus
{
    public int Sum(int a, int b)
    {
        return a + b;
    }

    public int Minus(int a, int b)
    {
        return a - b;
    }
}
0 голосов
/ 13 февраля 2019

Классы не могут наследоваться от интерфейса, поскольку интерфейс по определению пуст: он только предписывает обязательную реализацию определенных членов.

Из MSDN об интерфейсах :

"Интерфейс содержит определения для группы связанных функций, которые может реализовать класс или структура."

Например:

interface IWritable {
    void Write();
}

Код вышетолько устанавливает необходимость иметь метод Write() во всех классах, которые его реализуют.

Теперь часть tricky .Вы можете думать об интерфейсе как о чистом абстрактном классе, то есть он определяет только методы без реализации.В других языках программирования, таких как C ++ (который, кстати, поддерживает множественное наследование, следовательно, не нужно «никакого различия»), эти классы наследуются.Более того, вы можете определить реализации по умолчанию для этих методов или даже константы.Фактически, это будет разрешено и в C #.

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

С точки зрения дизайна, это, безусловно, реализация.

Дальнейшее чтение в MSDN: ссылка на интерфейсы .

0 голосов
/ 13 февраля 2019

Классы могут реализовывать несколько интерфейсов, и класс может наследовать не более одного класса одновременно.

0 голосов
/ 13 февраля 2019

Интерфейс не имеет ничего к наследованию *, поэтому класс реализует интерфейс.

* Это немного изменится в C # версии 8, где мы будемget реализация интерфейса по умолчанию но ради здравого смысла я бы предположил, что мы все равно будем использовать "инструменты", а не "наследовать"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...