Если у нас есть класс, который наследовался нескольким интерфейсам, и интерфейсы имеют методы с тем же именем, как мы можем реализовать эти методы в моем классе? Как мы можем указать который, метод которого интерфейс реализован?
Путем явной реализации интерфейса, например:
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();
Вы можете явно реализовать один или оба этих интерфейса .
Предположим, у вас есть эти интерфейсы:
public interface IFoo1
{
void DoStuff();
}
public interface IFoo2
{
void DoStuff();
}
Вы можете реализовать оба типа следующим образом:
public class Foo : IFoo1, IFoo2
{
void IFoo1.DoStuff() { }
void IFoo2.DoStuff() { }
}
Вы должны использовать ] явная реализация интерфейса
Иногда вам может даже потребоваться:
public class Foo : IFoo1, IFoo2
{
public void IFoo1.DoStuff() { }
public void IFoo2.DoStuff()
{
((IFoo1)this).DoStuff();
}
}