如果一个类继承自一个实现了IDisposable接口的接口,那么这个类是否也应该实现IDisposable接口呢?

4
如果一个类继承自一个实现了IDisposable接口的接口,那么这个类是否也应该实现IDisposable接口呢?
例如:
internal IMyInterface : IDisposable
{
  Method1();
}

internal ClassA : IMyInterface, IDisposable
{
  public Method1
  {
    ...
  }

  public Dispose()
  {
    ...
  }

}

或者

internal ClassA : IMyInterface
{
  public Method1
  {
    ...
  }

  public Dispose()
  {
    ...
  }

}

非常感谢对此事的任何澄清。谢谢。


你的派生类是否有任何需要显式处理的内容?如果没有,就不必费心了。基类会处理自己的处理要求。 - iCollect.it Ltd
5个回答

4
接口是合同,没有实现任何东西。因此,实现接口的类必须实现直接或间接继承的接口所规定的所有内容。如果您不这样做,您的代码甚至无法编译。
是的,除非您从已经实现了它的类派生类,否则您必须实现 IDisposable 接口。(注意:您不需要在类的继承列表中指定 IDisposable 接口,但必须实现其成员)。
更新
注意:Visual Studio 使您可以轻松地实现一个接口。只要您没有完全实现,则智能标记将自动出现在 IMyInterface 下面。您可以在智能标记菜单中选择显式和隐式实现接口。通常您会选择隐式实现。然后 VS 将自动创建接口所需的(空)方法、属性和其他成员,包括 Dispose。

2

这个类必须实现 Dispose 方法。

如果你在问是否需要声明你的类也实现了 IDisposable 接口?答案是否定的,不需要。


1
一个接口是一个声明。当一个接口继承另一个接口时,它实际上向继承的接口的声明中添加了更多的方法声明。
因此,在您的情况下 - IMyInterface将声明“Method1()”和“Dispose()”方法。无需再添加IDisposable。

0

由于IMyInterfaceIDisposable,所以ClassA不需要直接继承IDisposable。否则,在这个例子中,ClassA必须实现IDisposable


我想你的意思是关于接口的实现,而不是继承。 - iCollect.it Ltd
@Olivier解释得比我好多了。但我认为我使用了正确的术语。 ;) - IAbstract
继承通过继承的代码实现“是一个”关系。接口是实现的(即没有继承)。继承具有非常特定的含义。 - iCollect.it Ltd

0

不需要单独实现Dispose,因为接口在缺少Dispose()时无法编译。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接