1

いくつかのアセンブリに対して FXCop をいじり始めたところ、頭を包み込もうとしている興味深いことに気付きました。

「使い捨てメンバーを宣言する型は、IDisposable も実装する必要があります。型がアンマネージ リソースを所有していない場合は、ファイナライザーを実装しないでください。」

System.Web.UI.WebControls.Button から継承するいくつかのコントロールを含む独自のクラスがあります。継承されたボタンについて不満はありませんが、それらをラップするクラスはそうです。

ここでの影響や危険は何ですか?

4

3 に答える 3

4

クラスに IDisposable 型が含まれているが、クラスが IDisposable でない場合、クラスのインスタンスが不要になったときに、クラス内の IDisposable 型が時間どおりに破棄または解放されない可能性があります。Dispoble 型は、必要がなくなったらすぐに破棄して、リソースを解放する必要があります。そうしないと、GC が起動するまで待たなければならず、リソースも解放されます。

于 2009-05-29T16:24:59.200 に答える
2

ご存知のように、使い捨てオブジェクトの使用を終了したら、そのDisposeメソッドを呼び出す必要があります。

これらのコントロールから継承する場合でも、Disposeメソッドを呼び出すことができます。ただし、ラッパーを作成する場合は、ラッパークラスのユーザーがを呼び出すことができるはずDisposeです。

public void Dispose() {
    button.Dispose();
    // any other thing that is disposable
}
于 2009-05-29T16:26:38.327 に答える
1

ボタンを含むクラスの性質は何ですか?

通常、複合コントロールであるクラスが他のコントロールをメンバーとして持つことだけを期待します。このようなクラスは通常、System.Web.UI.CompositeControl または System.Web.UI.WebControl から直接的または間接的に継承し、メンバーとして持つコントロールを Controls コレクションに追加する必要があります。

そうすることで、それらが適切に破棄され、FxCop 警告が取り除かれます。

これが役に立たない場合は、問題のクラスの詳細を投稿してください。

于 2009-05-29T17:10:35.943 に答える