我遇到了一个非常棘手的情况,即实现具有与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()
}
}
的这个方法。
答案 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();