2012-05-02 19 views
1

Iている次のコード:Visual Studioのコード分析のDisposeの実装の警告

/// <summary> 
/// Dispose. 
/// </summary> 
public override sealed void Dispose() 
{ 
    Dispose(true); 
    GC.SuppressFinalize(this); 
} 

/// <summary> 
/// Dispose. 
/// </summary> 
/// <param name="disposing"> 
/// Disposing parameter. 
/// </param> 
protected override void Dispose(bool disposing) 
{ 
    if (disposing) 
    { 
    } 
    Clear(); 
    base.Dispose(disposing); 
} 

そして、次の警告があります。

警告435 CA2215:Microsoft.Usage:その方法「を確認しDSDump.Dispose () 'はすべての可能なコントロールフローパスでbase.DSDump.Dispose()を呼び出します。
警告436 CA1063:Microsoft.Design: 'DSDump.Dispose()'を削除し、Dispose(bool disposing)をオーバーライドし、disposingがtrueのコードパスにdisposeロジックを配置します。

私はすべてのアイデアはありません...私の側からはすべて見えます。

答えて

1

問題は、基本クラスが正しく定義されていないことです。

public void Dispose()は、基本クラスの仮想メソッドであってはなりません。 GC抑止を処理し、オーバーライドするべきである仮想protected virtual void Dispose(bool)メソッドを呼び出す必要があります。

+0

+1、マイクロソフトでは推奨されるサンプルコードを提供しています。http://msdn.microsoft.com/en-us/library/b1yfkh5e.aspx –

+0

@LexLi MSのガイドラインとサンプルコードには、どのように基本クラスを実装するが、派生クラスは実装しない。それについては、http://reedcopsey.com/2009/03/30/idisposable-part-2-subclass-from-an-idisposable-class/を参照してください。 –