Java Object.finalize()与C#IDisposable的对比



我有丰富的Java经验,知道为什么finalize()计划很快删除。另一方面,我对C#的了解是肤浅的——我或多或少知道它在抽象层面上提供了什么功能,但没有真正的经验。不久前,我发现了一个寻找问题的解决方案,通过搜索支持类似C++的析构函数的语言,CLI中出现了IDisposable

使后者成为持续支持的功能的区别是什么?

嗯,真的,它们不一样。

Java的finalize()在C#的终结器中有一个直接等价物(声明为~T(),其中T是类名(。在现代代码中,由于终结器在实践中很难正确使用,所以现在非常不鼓励在C#中使用终结器。也许总有一天他们也会遭到抨击。与此同时,如果你真的需要这种行为,你真的应该使用安全手柄。

与终结器相比,IDisposable似乎提供了资源的自动和确定性清理,就像C++的析构函数一样。太棒了!但我说看起来,因为实际上IDisposable不是魔法。就其本身而言,它什么也不做。你真正的意思是using语句,它实际上只是try/finally语句的语法糖,该语句在finally部分调用Dispose()(为了更好地度量,需要进行一些null检查(。

using var x = new T();
// ...

Java还具有CCD_;尝试使用资源";成语:

try (T x = new T()) {
// ...
}

然而CCD_ 17和CCD_;尝试使用资源";(C#2.0与Java 7(,因此它们在标准库和第三方库中的存在更加普遍。

相关内容

  • 没有找到相关文章

最新更新