类方法,该方法不在接口中
本文关键字:接口 方法 类方法 | 更新日期: 2023-09-27 18:25:22
我有一个简单的c#问题(所以我相信)。我是这门语言的初学者,遇到了一个关于实现它们的接口和类的问题。问题是
我有iA
接口
interface iA
{
bool method1
bool method2
bool method3
}
以及实现接口的3个类:类B
、C
和D
class B : iA
{
public bool method1
public bool method2
public bool method3
}
如果类B有另一个不在接口中的方法,假设method4()
和我有以下方法:
iA element = new B();
然后我会使用:
element.method4();
我会得到一个错误,说我没有接受第一个类型为iA
的参数的method4()
。
问题是:我可以有一个接口类型的对象,并用一个类实例化,然后让该对象从类中调用一个方法,一个不在接口中的方法吗?
我提出的一个解决方案是在接口和派生类之间使用一个抽象类,但IMO会使接口超出范围。在我的设计中,我只想使用接口和派生类。
是的,这是可能的。您只需要将Interface类型强制转换为类类型,如下所示:
iA element = new B();
((B)element).method4();
正如wudzik所建议的,你应该检查elemnt是否是正确的类型:
if(element is B)
{
((B)element).method4();
}
您必须将接口类型强制转换为类类型;通常我们使用作为:
B b = element as B; // <- try cast element as B
if (!Object.RefernceEquals(null, b)) { // <- element is B or can be legaly interpreted as B
b.method4();
}
"as"的优点是只有一个强制转换操作,而"is"和(B)必须执行两个强制转换。
如果不进行强制转换,您可以执行此操作。
interface iA
{
bool method1();
bool method2();
bool method3();
}
interface IFoo : iA
{
bool method4();
}
class B : IFoo
{
public bool method1() {}
public bool method2() {}
public bool method3() {}
public bool method4() {}
}
IFoo element = new B();
element.method4();
注意:C#接口尽量使用大写的I
前缀。