Iはコード分析警告CA1063トリガするいくつかのコードを有する:コード分析CA1063火災
CA1063を:Microsoft.Design:によって実装されるインターフェイスのリストからIDisposableを削除します'Functionality'を指定し、代わりに基本クラスDispose実装をオーバーライドします。
しかし、私はこの警告を修正するために何をする必要があるのか分かりません。
簡単に言えば、私はIDisposable
から派生したインターフェイスIFunctionality
を持っています。クラスFunctionality
はIFunctionality
を実装しますが、somコードを再利用できるようにクラスReusable
から派生しています。クラスReusable
もIDisposable
に由来します。
public class Reusable : IDisposable {
~Reusable() {
Dispose(false);
}
public void Dispose() {
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(Boolean disposing) {
// ...
}
public void DoSomething() {
// ...
}
}
public interface IFunctionality : IDisposable {
void DoSomething();
void DoSomethingElse();
}
public class Functionality : Reusable, IFunctionality {
public void DoSomethingElse() {
// ...
}
#if WORK_AROUND_CA1063
// Removes CA1063
protected override void Dispose(Boolean disposing) {
base.Dispose(disposing);
}
#endif
}
私はFunctionality
にDispose
をオーバーライドし、そのコードの意味を変更しないでくださいやっていても、基本クラスDispose
を呼び出すことによって、警告を取り除くことができます。
この文脈ではIDisposable
について何かありますか?見落としてしまったのですか、この特定の構造に対して失礼になったのはCA1063ですか?
私はCA1063を抑制できると知っていますが、ルールはかなり広く、このルールで報告されているIDisposable
を実装する際に他の問題を見逃したくありません。
古い問題を検討する必要がありますが、CA1063の問題がsealed' 'としてクラスをマークすることによって克服何回もあります。クラスが ''封印されていない場合、クラスは 'virual'または/および' Dispose() 'メソッドを' protected'にしなければならないと思います。 – mortb