![]() |
1
4
是的 您所能做的就是将using块包装在try/catch块中。 这就是为什么你必须这样做。 using块只是语法糖,编译器用等效的try/finall块替换每个using块。唯一的问题是编译器没有在try块中包装构造函数。编译后的代码将在IL中进行以下转换。
从代码中可以看到,当构造函数抛出异常时,对象x不会被实例化,如果不处理,控件也不会从异常引发点进一步移动。 blog-post on my blog 昨晚关于这个问题。
我想我找到了答案,为什么C#没有将对象构造包装到try块中,而不是使用块。
原因很简单。如果将声明和实例化都包装在try块中,那么
|
![]() |
2
5
把你的注意力放在抓球上。
|
![]() |
3
1
输出:
可能这是因为从未创建过对象,所以没有可调用的Dispose。
|
![]() |
4
0
对于设计良好的类来说,这应该不是问题。记住整个问题:
所以,问题是,你应该怎么处理政府分配的资源
关于那些资源。那不是你的工作。当决定
责任是使用
|
![]() |
5
-1
此示例显示了一个ctor,它可以在出现问题时防止泄漏,当您在工厂方法中分配一次性物品时,同样的规则也适用。
编辑 当然,这样做的原因是:当你调用工厂或ctor时,你只能处理它的结果。当电话接通时,你必须假设到目前为止一切正常。 当你打电话给一个医生或工厂的时候,你不需要做任何反向的精神分析来处理任何你无论如何都拿不到的东西。如果它确实抛出异常,那么在重新抛出异常之前,工厂/ctor有责任清除分配的一半。 (希望,这一次,已经够详细了……) |
|
M.Jane · 组织和编写异常类的正确方法 6 年前 |
![]() |
shubham daharwal · java中的内部捕获异常 6 年前 |
![]() |
Jon · 如何在不需要任何操作的情况下处理Python异常 6 年前 |
![]() |
felix1415 · C++捕获(标准::异常和e)与捕获(…) 6 年前 |
![]() |
k0pernikus · 如何在scala中键入可能引发异常的函数? 6 年前 |