gpt4 book ai didi

c# - using语句用法

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

如果 MyClass 实现了 IDisposable 接口(interface),那么给定的两个片段是否都能正确处理 MyClass 对象?哪种方法比另一种更可取?

代码 1

public MyModel MethodOne()
{
using (MyClass myClass = new MyClass())
{
var myModel = new MyModel();
myModel.MyModelData = myClass.GetData();

return myModel;
}
}

代码 2

public MyModel MethodTwo()
{
var myData = new MyData();

using (MyClass myClass = new MyClass())
{
myData = myClass.GetData();
}

var myModel = new MyModel();
myModel.MyModelData = myData;

return myModel;
}

最佳答案

是一样的:对象会被两种方式释放。

using 语句被编译器翻译成一个 try block ,它在 finally block 中调用 Dispose

finally 保证在 try block 执行完毕后执行,无论其执行路径如何。

Dispose 无论如何都会被调用。

引用 MSDN

恕我直言,作为一种风格和最佳实践,最好在对象不再需要时尽快释放它,因为您将更早地释放资源,而且如果 Dispose 抛出异常,您的方法将返回任何内容。而且会更容易调试。

更新

作为KrisVandermotten pointed out在某些情况下,finally block 不会执行。

  • 环境.FailFast
  • 无法捕获的异常
  • 电源故障

关于c# - using语句用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20374072/

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