Visual Studio のコード分析ユーティリティでコードを実行すると、解決方法がわからないという警告が表示されます。おそらく、ここにいる誰かが同様の問題に遭遇し、それを解決して、彼らの洞察を喜んで共有しています.
DataGridView コントロールで使用されるカスタム ペイント セルをプログラミングしています。コードは次のようになります。
public class DataGridViewMyCustomColumn : DataGridViewColumn
{
public DataGridViewMyCustomColumn() : base(new DataGridViewMyCustomCell())
{
}
次の警告が生成されます。
CA2000 : Microsoft.Reliability: メソッド 'DataGridViewMyCustomColumn.DataGridViewMyCustomColumn()' で、オブジェクトへのすべての参照が範囲外になる前に、オブジェクト 'new DataGridViewMyCustomCell()' で System.IDisposable.Dispose を呼び出します。
DataGridViewMyCustomCell (またはその継承元のクラス) が IDisposable インターフェイスを実装し、DataGridViewMyCustomCell によって要求されたリソースがなくなったときに Dispose() メソッドを呼び出してクリーンアップする必要があることを警告していることを理解しています。
インターネットで見た例では、using ブロックを使用してオブジェクトの有効期間をスコープし、システムに自動的に破棄させることを提案していますが、コンストラクターの本体に移動すると base が認識されないため、using を記述できませんその周りをブロックします...とにかくやりたいかどうかはわかりません。それは、後で基本クラス内で引き続き使用できるオブジェクトを解放するようにランタイムに指示しないからですか?
私の質問は、コードはそのままで大丈夫ですか? または、警告を解決するためにどのようにリファクタリングできますか? 本当に適切でない限り、警告を抑制したくありません。