2012-05-02 44 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/ –

相关问题