【发布时间】:2010-10-12 12:06:53
【问题描述】:
我有以下代码: 包含两个一次性成员的一次性类。 其中一个是使用 new() 方法初始化的,另一个是使用静态工厂方法。 我也有静态代码分析规则,CA2213为错误。
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 的这个错误(Wich 是使用静态工厂初始化的),并且它没有被释放。
有人熟悉这个问题吗?什么会导致这种行为?
【问题讨论】:
标签: c# visual-studio-2010 fxcop