我们有构造函数,我们可以将它们视为对象实例化的合约。
如果不向构造函数提供精确的参数集,就没有其他方法可以创建实例。
但是我们如何(并且我们应该打扰)执行一些验尸活动?我们有终结器,但不建议将它们用于通用终结器。我们也必须IDisposable
实施。但是,如果我们在没有一次性对象的情况下使用,using
我们无法保证 Dispose 会被调用。
为什么现在有办法在对象被释放之前强制执行对象的某些状态?
在终结器中整理是不可能的,因为不能保证对象图是完整的,并且垂死对象的引用对象没有被 GC 清空。
当然,不SaveState()
通过客户端代码调用实例对象会给它带来一些麻烦,而不是我的对象。
尽管如此,要求在构造函数中注入所有需要的依赖项被认为是一种好习惯(如果没有可用的默认值)。没有人会轻易说:“离开默认构造函数,创建属性并在对象处于无效状态时抛出异常。”
更新:
由于有很多投票可以结束这个问题,我想说一些设计模式也可以作为答案。
无论您是否使用 DI,您都可以计算对象被请求/创建的次数。但是如果没有明确的释放调用,你不知道什么时候应该调用 dispose。
我根本不明白如何在正确的时间实施处置。