2012-05-02 90 views
1

我有以下代碼:Visual Studio代碼分析處置實施警告

/// <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),並將dispose邏輯放置在代碼路徑中'disposing'爲true。

我沒有任何想法,爲什麼...從我身邊看起來都不錯。

回答

1

問題是您的基類定義不正確。

public void Dispose()不應該是您的基類中的虛擬方法。它應該處理GC抑制並調用虛擬protected virtual void Dispose(bool)方法,這是您應該覆蓋的方法。

+0

+1,Microsoft確實有示例代碼來顯示建議的內容,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/ –

相關問題