Когда нам нужно повторно наследовать от интерфейса, который был реализован классом, от которого мы наследуем? - PullRequest
0 голосов
/ 14 апреля 2020

Компилятор не выдает никаких предупреждений. Так что это заставляет меня ругаться ios. Когда нам нужно повторно наследовать от интерфейса, который был реализован классом, от которого мы наследуем?

interface IFoo
{
    void Any();
}

class Foo : IFoo
{
    public void Any() => Console.WriteLine("Foo");
}

class Program : Foo, IFoo
{
    static void Main()
    {
        IFoo ifoo = new Program();
        ifoo.Any();

        Foo foo = new Program();
        foo.Any();


        Program program = new Program();
        program.Any();
    }
}

1 Ответ

1 голос
/ 14 апреля 2020

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

Совершенно верно сделать это, а затем явно реализуйте IFoo в Program, чтобы иметь другую реализацию.

Пример:

using System;

interface IFoo
{
    void Any();
}

class Foo : IFoo
{
    public void Any() => Console.WriteLine("Foo");
}

class Program : Foo, IFoo
{
    static void Main()
    {
        IFoo ifoo = new Program();
        ifoo.Any();

        Foo foo = new Program();
        foo.Any();


        Program program = new Program();
        program.Any();
    }

    void IFoo.Any() => Console.WriteLine("Program");
}

Это выдаст:

Program
Foo
Foo

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

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