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スマート タグは、完全に実装していない限り、自動的に下に表示されます。スマート タグ メニューで、インターフェイスの明示的実装と暗黙的実装のどちらかを選択できます。通常はimplicitを選択します。次に、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

IMyInterfaceであるためIDisposableClassAから直接継承する必要はありませんIDisposable...そうでない場合は、はい、この例でClassA実装する必要があります。IDisposable

于 2012-06-26T13:41:42.363 に答える
0

いいえ、インターフェイスはそこにあるまでコンパイルできないため、Disposeを個別に実装する必要はありませんDispose()

于 2012-06-26T13:41:47.420 に答える