gpt4 book ai didi

c# - Dispose 中的空 "using"语句

转载 作者:IT王子 更新时间:2023-10-29 04:38:56 28 4
gpt4 key购买 nike

最近看到一些代码是这样写的:

public void Dipose()
{
using(_myDisposableField) { }
}

这对我来说似乎很奇怪,我更愿意看到 myDisposableField.Dispose();

使用“使用”来处置您的对象而不是显式调用的原因是什么?

最佳答案

不,一点也没有。它只会编译成一个空的 try/finally 并最终调用 Dispose

删除它。您将使代码更快、更具可读性,而且也许最重要的是(当您继续阅读下文时)更表达其意图

更新:他们有点聪明,等效代码需要空检查,并且根据 Jon Skeet 的建议,如果涉及多线程,也需要本地副本(以与标准事件调用模式相同的方式来避免空检查和方法调用之间的竞争。

IDisposable tmp = _myDisposableField; 

if (tmp != null)
tmp.Dispose();

从我编写的示例应用程序的 IL 中可以看出,您似乎还需要将 _myDisposableField 直接视为 IDisposable。如果任何类型显式实现IDisposable接口(interface)并且提供public void Dispose()方法,这将很重要同时。

此代码也不会尝试复制在使用 using 时存在的 try-finally,但可以假定这被认为是不必要的。然而,正如 Michael Graczyk 在评论中指出的那样,finally 的使用提供了针对异常的保护,特别是 ThreadAbortException(可能在任何时候发生)。也就是说,实际发生这种情况的窗口非常小。

尽管如此,我敢打赌他们这样做并没有真正理解它给他们带来了哪些微妙的“好处”。

关于c# - Dispose 中的空 "using"语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11778790/

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