我该如何继承IDisposable?

And*_*est 22 c# inheritance coupling idisposable interface

班级名称已被更改以保护无辜者.

如果我有一个名为ISomeInterface的接口.我还有继承接口的类,FirstClass和SecondClass.FirstClass使用必须处理的资源.SecondClass没有.

所以问题是,我应该从IDisposable继承哪里?以下两个选项似乎都不太理想:

1)使FirstClass继承IDisposable.然后,任何处理ISomeInterfaces的代码都必须知道是否要处理它们.这闻起来像是与我紧密耦合.

2)使ISomeInterface继承IDisposable.然后,任何从它继承的类都必须实现IDisposable,即使没有任何东西可以处理.除了注释之外,Dispose方法基本上是空白的.

#2对我来说似乎是正确的选择,但我想知道是否有其他选择.

Mar*_*ell 20

如果抽象实体(接口或抽象类)有可能需要是一次性的,它应该实现它.Stream,例如本身不需要IDisposable,也不IEnumerator<T>......

抽象基类可能更简单,因为你可以有一个默认(空)实现,Dispose()然后可能是终结器/ Dispose(bool)模式,即

void IDisposable.Dispose() { Dispose(true); GC.SuppressFinalize(this); }
protected virtual void Dispose(bool disposing) {}
~BaseType() {Dispose(false);}
Run Code Online (Sandbox Code Playgroud)