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

时间:2012-06-26 13:39:11

标签: c# .net

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

e.g。

internal IMyInterface : IDisposable
{
  Method1();
}

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

  public Dispose()
  {
    ...
  }

}

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

  public Dispose()
  {
    ...
  }

}

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

5 个答案:

答案 0 :(得分:4)

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

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


更新

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

答案 1 :(得分:2)

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

如果您问是否必须声明您的班级同时实施IDisposable ?所以答案是否定的,你没必要

答案 2 :(得分:1)

接口是声明。当一个接口继承另一个接口时 - 它实际上会为继承接口的声明添加一些方法声明。

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

答案 3 :(得分:0)

由于IMyInterfaceIDisposable,因此ClassA不需要直接从IDisposable继承...否则,是的,ClassA必须实现{{} 1}}在这个例子中。

答案 4 :(得分:0)

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