框架设计指南(第二版,第 327 页)说:
考虑提供方法Close()
,除了Dispose()
,如果接近,是该领域的标准术语。
这样做时,重要的是使 Close 实现与Dispose
并考虑实施IDisposable.Dispose
方法明确。
因此,按照提供的示例,我得到了这个类:
public class SomeClass : IDisposable {
private SomeDisposable someInnerDisposable;
public void Open() {
this.someInnerDisposable = new SomeDisposable();
}
void IDisposable.Dispose() {
this.Close();
}
public void Close() {
this.Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing) {
if (disposing) {
this.someInnerDisposable.Dispose();
this.someInnerDisposable = null;
}
}
}
FxCop 似乎不喜欢这样:
CA1816:Microsoft.Usage:“SomeClass.Close()”调用“GC.SuppressFinalize(object)”,该方法通常仅在“IDisposable.Dispose”的实现中调用。有关详细信息,请参阅 IDisposable 模式。
CA1816:Microsoft.Usage:更改“SomeClass.IDisposable.Dispose()”以调用“GC.SuppressFinalize(object)”。一旦对象被处置并且超出范围,这将防止对象不必要的终结。
CA1063:Microsoft.Design:修改“SomeClass.IDisposable.Dispose()”,以便它调用 Dispose(true),然后对当前对象实例(Visual Basic 中的“this”或“Me”)调用 GC.SuppressFinalize,然后返回。
CA1063:Microsoft.Design:将“SomeClass.IDisposable.Dispose()”重命名为“Dispose”,并确保将其声明为公共并密封。
-or-
I tried
[SuppressMessage("Microsoft.Design", "CA1063:ImplementIDisposableCorrectly",
Justification = "Framework Design Guidelines say it's ok.")]
void IDisposable.Dispose()
{
this.Close();
}
但 FxCop 1.36 仍然报告它们。
EDIT:按照建议进行更改可以消除除此警告之外的所有警告:
CA1063:Microsoft.Design:将“SomeClass.IDisposable.Dispose()”重命名为“Dispose”,并确保将其声明为公共并密封。
EDIT 2: CODE_ANALYSIS 确实丢失了。谢谢。
改变它。
让 Close() 调用 this.Dispose() 并将逻辑放入 Dispose() 方法而不是 Close() 方法中。
------------------- 编辑后的更多信息 ---------------
另外,将声明更改为:
public void Dispose()
应该消除其他错误。由于您已将其声明为:
void IDisposable.Dispose()
FxCop 抱怨说,它没有被标记为公开和密封。就我个人而言,我更喜欢避免错误而不是抑制错误。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)