从具有相同方法名称的多个接口inheritance

如果我们有一个从多个接口inheritance的类,并且接口具有同名的方法,那么我们如何在我的类中实现这些方法呢? 我们如何指定实现哪个接口的方法?

通过明确地实现接口,像这样:

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"); } } 

当使用显式接口实现时,这个函数在这个类中是不公开的。 因此,要访问这些函数,必须首先将对象转换为接口types,或将其分配给声明为接口types的variables。

 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(); } } 
 public class ImplementingClass : AClass1, IClass1, IClass2 { public override string Method() { return "AClass1"; } string IClass1.Method() { return "IClass1"; } string IClass2.Method() { return "IClass2"; } } 

所以当从不同的类中调用时,你将不得不将types转换为所需的接口或抽象类。

 ImplementingClass implementingClass = new ImplementingClass(); ((AClass1)implementingClass).Method(); 
 public interface IDemo1 { void Test(); } public interface IDemo2 { void Test(); } public class clsDerived:IDemo1,IDemo2 { void IDemo1.Test() { Console.WriteLine("IDemo1 Test is fine"); } void IDemo2.Test() { Console.WriteLine("IDemo2 Test is fine"); } } public void get_methodes() { IDemo1 obj1 = new clsDerived(); IDemo2 obj2 = new clsDerived(); obj1.Test();//Methode of 1st Interface obj2.Test();//Methode of 2st Interface } 

您可以实现一个接口显式地另一个实现

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

ITest.Test将是默认的实现。

 Dual dual = new Dual(); dual.Test(); ((ITest2)dual).Test(); 

输出:

 Console.WriteLine("ITest.Test"); Console.WriteLine("ITest2.Test");