Наследование от нескольких интерфейсов с тем же именем метода

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

66
задан Venkat 29 April 2019 в 07:58
поделиться

4 ответа

Путем явной реализации интерфейса, например:

public interface ITest {
    void Test();
}
public interface ITest2 {
    void Test();
}
public class Dual : ITest, ITest2
{
    void ITest.Test() {
        Console.WriteLine("ITest.Test");
    }
    void ITest2.Test() {
        Console.WriteLine("ITest2.Test");
    }
}

При использовании явных реализаций интерфейса функции не являются общедоступными в классе. Следовательно, чтобы получить доступ к этим функциям, вы должны сначала привести объект к типу интерфейса или назначить его переменной, объявленной с типом интерфейса.

var dual = new Dual();
// Call the ITest.Test() function by first assigning to an explicitly typed variable
ITest test = dual;
test.Test();
// Call the ITest2.Test() function by using a type cast.
((ITest2)dual).Test();
94
ответ дан 24 November 2019 в 15:00
поделиться

Вы можете явно реализовать один или оба этих интерфейса .

Предположим, у вас есть эти интерфейсы:

public interface IFoo1
{
    void DoStuff();
}

public interface IFoo2
{
    void DoStuff();
}

Вы можете реализовать оба типа следующим образом:

public class Foo : IFoo1, IFoo2
{
    void IFoo1.DoStuff() { }

    void IFoo2.DoStuff() { }        
}
8
ответ дан 24 November 2019 в 15:00
поделиться

Вы должны использовать ] явная реализация интерфейса

10
ответ дан 24 November 2019 в 15:00
поделиться

Иногда вам может даже потребоваться:

public class Foo : IFoo1, IFoo2
{
    public void IFoo1.DoStuff() { }

    public void IFoo2.DoStuff()
    {
        ((IFoo1)this).DoStuff();
    }        
}
3
ответ дан 24 November 2019 в 15:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: