我有一些代码会触发Code Analysis警告CA1063:
CA1063 : Microsoft.Design : 从“Functionality”实现的接口列表中删除IDisposable,并覆盖基类Dispose实现。
然而,我不确定该怎么修复这个警告。
简单来说,我有一个接口IFunctionality
,它派生自IDisposable
,类Functionality
实现了IFunctionality
,但派生自类Reusable
以便能够重用一些代码。类Reusable
也派生自IDisposable
。
public class Reusable : IDisposable {
~Reusable() {
Dispose(false);
}
public void Dispose() {
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(Boolean disposing) {
// ...
}
public void DoSomething() {
// ...
}
}
public interface IFunctionality : IDisposable {
void DoSomething();
void DoSomethingElse();
}
public class Functionality : Reusable, IFunctionality {
public void DoSomethingElse() {
// ...
}
#if WORK_AROUND_CA1063
// Removes CA1063
protected override void Dispose(Boolean disposing) {
base.Dispose(disposing);
}
#endif
}
我可以通过在Functionality
上重写Dispose
并调用基类Dispose
来消除警告,尽管这样做不应该改变代码的语义。
所以,在这种情况下,IDisposable
是否有我忽视的东西,还是只是CA1063
在这个特定结构上误报了?
我知道我可以抑制CA1063
,但这条规则很广泛,我不想错过此规则报告的实现IDisposable
中的其他任何问题。