gpt4 book ai didi

c# - 当对象设置为 null 时,针对 CLR 的编译器能否生成 Dispose 方法调用?

转载 作者:行者123 更新时间:2023-11-30 13:15:53 24 4
gpt4 key购买 nike

当对象设置为 null 时,编译器(例如 C#)能否自动生成对对象的 Dispose 方法的调用(当然,对象应该首先支持 Dispose 方法)。例如,如果我们写

cnSqlConnection = null;

而 cnSqlConnection 是类型 SqlConnection 的实例,C# 编译器能否在更新对 null 的引用之前立即注入(inject) Dispose 方法调用?

此外,由于框架类确实支持 Dispose 方法可能被多次调用的场景,因此即使重复调用也没有坏处。

最佳答案

(a) 正确实现的对象应该在其终结器中执行相同的清理逻辑。如果您省略对 Dispose 的调用,终结器逻辑可能无论如何都会运行。

(b) Raymond Chen explains the complexity of auto-dispose here .总之:只有让人类程序员在正确的位置调用 Dispose 才是真正安全的。如果您将自动处置作为其逻辑结论,那么您最终会遇到引用计数,这是 CLR 内存模型要避免的。

关于c# - 当对象设置为 null 时,针对 CLR 的编译器能否生成 Dispose 方法调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3548749/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com