问题说明
IDisposable
的类。请参阅以下示例中的FooClass
。为简单起见,我使用string
字段;试着想象这个类有合法的理由来实现IDisposable
。FooClass
初始化自己的引用类型依赖项FooMember
(不理想,但假设它是必要的)。FooMember
是一个只读字段。null
。 FooMember
是只读的,所以我不能。请参阅下面示例中的注释行。FooClass
取消GC.SuppressFinalize
的最终确定(见下文)。问题
"foo"
的实例被处置并超出范围后,垃圾收集器是否会将FooClass
留在内存中?readonly
?示例
public FooClass : IDisposable
{
public FooClass()
{
FooMember = "foo";
}
public void Dispose()
{
if (IsDisposed)
{
return;
}
try
{
Dispose(true);
}
finally
{
IsDisposed = true;
GC.SuppressFinalize(this);
}
}
protected virtual void Dispose(bool disposing)
{
if (disposing)
{
// The line below won't compile because FooMember is read-only.
// FooMember = null;
}
}
private readonly string FooMember;
private bool IsDisposed = false;
}