类方法,该方法不在接口中

本文关键字:接口 方法 类方法 | 更新日期: 2023-09-27 18:25:22

我有一个简单的c#问题(所以我相信)。我是这门语言的初学者,遇到了一个关于实现它们的接口和类的问题。问题是

我有iA 接口

interface iA
{
  bool method1
  bool method2
  bool method3
}

以及实现接口的3个类:类BCD

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前缀。

相关文章: