我有下面的代碼: 包含兩個一次性成員的一次性類。 其中之一是使用new()方法進行初始化,另一個使用靜態工廠方法。 我也有靜態代碼分析規則,CA2213作爲錯誤。FxCop的CA2213錯誤在VS2010
public class DisposableClass : IDisposable
{
private WebClient m_DisposableMember1;
public WebClient DisposableMember1
{
get
{
if (m_DisposableMember1 == null)
{
m_DisposableMember1 = new WebClient();
}
return m_DisposableMember1;
}
}
private WebClient m_DisposableMember2;
public WebClient DisposableMember2
{
get
{
if (m_DisposableMember2 == null)
{
m_DisposableMember2 = Factory.Create();
}
return m_DisposableMember2;
}
}
#region Finalize/Dispose Pattern
private bool m_IsDisposed = false;
//Implement IDisposable.
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
~DisposableClass()
{
Dispose(false);
}
protected virtual void Dispose(bool disposing)
{
if (!m_IsDisposed)
{
if (disposing)
{
DisposableMember1.Dispose();
// DisposableMember2 in not disposed and not notified by fxCop
}
m_IsDisposed = true;
}
}
#endregion Finalize/Dispose Pattern
}
這是一個簡單的工廠類:
public static class Factory
{
public static WebClient Create()
{
return new WebClient();
}
}
當我致電DisposableMember1屬性的Dispose()方法,我得到CA2213。 當我調用m_DisposableMember1成員的Dispose()方法時,我不會收到此錯誤。
更多了,我沒有得到這個錯誤m_DisposableMember2(至極是使用靜態工廠初始化),並且它沒有被配置。
有沒有人熟悉這個問題?什麼會導致這種行爲?