从具有相同方法名称的多个接口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");