【发布时间】:2009-12-29 17:31:28
【问题描述】:
我正在开发一个 .NET 项目,该项目需要与一些用户定义的类进行交互 - 称为“作业”。所有作业类都必须实现特定接口IJob,以便库使用它们。有时,作业类可能包含非托管资源,需要显式处置。
如果我事先不知道作业是否需要明确处置,我应该如何确保在使用后正确处置所有作业?我自己有一些想法,但想听听您的 cmets/建议:
制作
IJob : IDisposable,强制所有作业实现Dispose()方法。这将允许我处理using块中的作业,但由于大多数作业不预计需要明确处置,这可能会给客户端开发人员增加不必要的混乱。在
try-finally块中执行所有涉及作业的工作,并使用finally确保在作业实现IDisposable时调用Dispose()。这使得客户端更容易实现新的作业类 - 不必实现空的Dispose()方法 - 但它也隐藏了库知道并关心一次性作业的事实。
写完这篇文章后,我倾向于解决方案 #1,但我仍然认为看到替代解决方案以及我已经想到的两个解决方案的其他优点/缺点会很好。
【问题讨论】:
标签: c# .net interface idisposable