C# 从具有相同方法名称的多个接口继承
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/2371178/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Inheritance from multiple interfaces with the same method name
提问by masoud ramezani
If we have a class that inherits from multiple interfaces, and the interfaces have methods with the same name, how can we implement these methods in my class? How can we specify which method of which interface is implemented?
如果我们有一个继承自多个接口的类,并且接口有同名的方法,我们如何在我的类中实现这些方法?我们如何指定实现哪个接口的哪个方法?
采纳答案by Pete
By implementing the interface explicitly, like this:
通过显式实现接口,如下所示:
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");
}
}
When using explicit interface implementations, the functions are not public on the class. Therefore in order to access these functions, you have to first cast the object to the interface type, or assign it to a variable declared of the interface type.
当使用显式接口实现时,函数在类上不是公共的。因此,为了访问这些函数,您必须首先将对象强制转换为接口类型,或者将其分配给声明为接口类型的变量。
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();
回答by Gopher
You must use explicit interface implementation
您必须使用显式接口实现
回答by Mark Seemann
You can implement one or both of those interfaces explicitly.
您可以显式地实现其中一个或两个接口。
Say that you have these interfaces:
假设你有这些接口:
public interface IFoo1
{
void DoStuff();
}
public interface IFoo2
{
void DoStuff();
}
You can implement both like this:
您可以像这样实现两者:
public class Foo : IFoo1, IFoo2
{
void IFoo1.DoStuff() { }
void IFoo2.DoStuff() { }
}
回答by Sebastian
Sometimes you may even need to do:
有时你甚至可能需要这样做:
public class Foo : IFoo1, IFoo2
{
public void IFoo1.DoStuff() { }
public void IFoo2.DoStuff()
{
((IFoo1)this).DoStuff();
}
}
回答by Rohit.P
public class ImplementingClass : AClass1, IClass1, IClass2
{
public override string Method()
{
return "AClass1";
}
string IClass1.Method()
{
return "IClass1";
}
string IClass2.Method()
{
return "IClass2";
}
}
So when calling from different class you will have to type cast the object into required Interface or Abstract class.
因此,当从不同的类调用时,您必须将对象类型转换为所需的接口或抽象类。
ImplementingClass implementingClass = new ImplementingClass();
((AClass1)implementingClass).Method();
回答by Ranajit kumar
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
}
回答by Bimal Das
You can implement one interface Explicitlyand another implecitely.
您可以实现一个接口 Explicitly和另一个implecitely。
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
will be the default implementation.
ITest.Test
将是默认实现。
Dual dual = new Dual();
dual.Test();
((ITest2)dual).Test();
Output:
输出:
Console.WriteLine("ITest.Test");
Console.WriteLine("ITest2.Test");
回答by Vinayak Savale
Answer is "By using explicit Interface implementation"
答案是“通过使用显式接口实现”
Take one example:
举一个例子:
using System;
interface A
{
void Hello();
}
interface B
{
void Hello();
}
class Test : A, B
{
void A.Hello()
{
Console.WriteLine("Hello to all-A");
}
void B.Hello()
{
Console.WriteLine("Hello to all-B");
}
}
public class interfacetest
{
public static void Main()
{
A Obj1 = new Test();
Obj1.Hello();
B Obj2 = new Test();
Obj2.Hello();
}
}
Output: Hello to all-A Hello to all-B
输出:大家好-A 大家好-B