|
|
1
36
你无法真正“阻止”IDisposable的传播。有些类需要处理,例如
在某些情况下,IDisposable可以忽略,因为它支持可选的情况。例如,WaitHandle实现IDisposable以支持命名互斥。如果未使用名称,Dispose方法将不执行任何操作。MemoryStream是另一个例子,它不使用系统资源,其Dispose实现也不做任何事情。仔细考虑是否正在使用非托管资源具有指导意义。检查.net库的可用源代码或使用反编译器也是如此。 |
|
|
2
20
您可以做的是避免向对象层次结构中的叶类添加IDisposable。这并不总是一项容易的任务,但却是一项有趣的练习。从逻辑的角度来看,没有理由说鞋带是一次性的。除了在这里添加WaitHandle,还可以在鞋带和WaitHandle的使用点添加关联。最简单的方法是通过字典实例。 如果您可以通过实际使用WaitHandle的点处的映射将WaitHandle移动到松散关联中,则可以断开此链。 |
|
|
3
16
阻止
等待句柄的范围仅限于
因为等待句柄是
|
|
4
3
这基本上就是将组合或聚合与一次性类混合时发生的情况。如前所述,第一种解决方法是从鞋带中重构waitHandle。 话虽如此,在没有非托管资源的情况下,您可以大大减少一次性模式。(我仍在寻找这方面的官方参考。) 但是您可以省略析构函数和GC.SuppressFinalize(这个);也许可以稍微清理一下虚拟的void Dispose(bool disposing)。 |
|
|
5
3
有趣的是如果
那么什么时候
然后它会抱怨。
我怀疑这只是FxCop的一个限制,而不是一个解决方案,因为在第一个版本中
|
|
|
6
3
我不认为有一种技术方法可以阻止IDisposable的传播,如果你让你的设计紧密结合的话。人们应该怀疑这个设计是否正确。
另一种设计可以是:
|
|
|
7
1
使用控制反转如何?
|