4

如果一个类继承自一个本身实现 IDisposable 的接口,该类是否也应该实现 IDisposable?

例如

internal IMyInterface : IDisposable
{
  Method1();
}

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

  public Dispose()
  {
    ...
  }

}

或者

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

  public Dispose()
  {
    ...
  }

}

对此问题的任何澄清将不胜感激。谢谢

4

5 回答 5

4

接口是契约,没有任何实现。因此,实现接口的类必须实现直接或间接继承的接口所要求的一切。如果你不这样做,你的代码甚至不会编译。

是的,IDisposable除非您从已经实现它的类派生您的类,否则您必须实现它。(注意:你不需要IDisposable在你的类的继承列表中指定接口,但你必须实现它的成员。)


更新

注意:Visual Studio 使您可以轻松实现接口。IMyInterface只要您还没有完全实现,智能标签就会自动出现在下方。您可以在智能标记菜单中选择接口的显式和隐式实现。通常你会选择隐式。然后 VS 会自动创建接口所需的(空)方法、属性和其他成员,包括Dispose.

于 2012-06-26T13:45:31.793 回答
2

Dispose无论如何,该类都必须实现该方法。

如果你问你是否必须声明你的类也实现IDisposable了?所以答案是否定的,你不必

于 2012-06-26T13:42:40.617 回答
1

接口是一个声明。当一个接口继承另一个接口时 - 它实际上在继承接口的声明中添加了更多方法声明。

所以在你的情况下 - IMyInterface 将声明“Method1()”和“Dispose()”方法。无需再次添加 IDisposable。

于 2012-06-26T13:43:09.007 回答
0

既然IMyInterfaceIDisposable,那么ClassA就不需要直接继承自IDisposable...否则,是的,ClassA必须IDisposable在这个例子中实现。

于 2012-06-26T13:41:42.363 回答
0

不,没有必要单独实现 Dispose,因为接口不会让它编译直到Dispose()存在。

于 2012-06-26T13:41:47.420 回答