以下IDisposable状态的MSDN文档:
将
IDisposable接口添加到现有类是一个版本更改,因为它会更改类的语义.
这究竟是什么意思?
我可以看到如何删除 IDisposable将是一个大问题.using例如,不再可能在语句内实例化类.但是还有什么IDisposable特别的,特别是在添加界面的情况下?
当你实现时IDisposable,你基本上添加了"当你完成它时应该处理它"的语义.这意味着没有处理它的现有代码违反了隐含合同......所以没有办法从"不实现IDisposable"变为"实现IDisposable",同时保持客户正确使用你的类型,除非你也可以访问所有客户端代码.
再举一个例子 - 假设文档GetHashCode已更新为"这应该总是返回一个偶数" - 这将是一个重大变化,因为现有代码很容易返回一个奇数.同样,它不会破坏源代码 - 一切仍然会构建 - 但你将改变合同以使其更具限制性.
如果您IDisposable在客户端代码上查看作为合同的实现,希望它更清楚为什么它是一个重大变化.