当两个接口具有相同的方法名称时,如何访问inerface方法?

时间:2016-09-12 08:47:00

标签: c# interface

我遇到了一个非常棘手的情况,即实现具有与Member相同的方法名称的多个接口。贝洛是该问题的示例代码。

@noescape

主类

public interface IBase1
{
    void show();
}
public interface IBase2
{
    void show();
}
public class BaseClass :IBase1, IBase2
{
    void IBase1.show()
    {
        Console.WriteLine("IBase1.show()");
    }
    void IBase2.show()
    {
        Console.WriteLine("IBase2.show()");
    }
}

这里我有两个接口,每个接口都有一个show()方法,另一个接口实现了这两个接口,现在我的问题是如何在Main函数中访问class Program { static void Main(string[] args) { BaseClass obj = new BaseClass(); //How to access IBase1.show() and IBase2.show() } } 的这个方法。

2 个答案:

答案 0 :(得分:5)

您可以转换为适当的界面

BaseClass obj = new BaseClass();
IBase1 b1 = (IBase1)obj;
b1.show(); // IBase1.show called
// or inline
((IBase1)obj).show();

注意,你不需要来施展它,这应该没问题

IBase1 b1 = obj;
b1.show(); // same as above

一个很好的副作用是,如果你有一个指定参数类型的方法,那么它也可以正常工作

public void ExecuteB1Show(IBase1 b1)
{
     b1.show();
}

ExecuteB1Show(obj); // no need to cast, obj is a IBase1

答案 1 :(得分:1)

也许它适合演员:

((IBase1)obj).show();
((IBase2)obj).show();