通常当你销毁一个私有成员时,你可能会这样做:
public void Dispose() {
var localInst = this.privateMember;
if (localInst != null) {
localInst.Dispose();
}
}
局部变量被赋值的目的是为了避免竞态条件,即其他线程在空值检查后将私有成员赋值为null。在这种情况下,如果对实例调用Dispose
两次,我并不在意。
我经常使用这种模式,所以我编写了一个扩展方法来实现:
public static void SafeDispose(this IDisposable disposable)
{
if (disposable != null)
{
// We also know disposable cannot be null here,
// even if the original reference is null.
disposable.Dispose();
}
}
现在在我的类中,我可以这样做:
public void Dispose() {
this.privateMember.SafeDispose();
}
问题在于,FxCop并不知道我正在这样做,因此它会在每种情况下都给出CA2000: Dispose objects before losing scope警告。
我不想关闭此规则,也不想抑制每个情况。 有没有一种方法可以向 FxCop 暗示此方法就像Dispose
一样重要呢?
this.privateMember.Dispose()
。你的代码实际上是写成了this.privateMember.SafeDispose()
吗? - Ed Chapel