在C#中使用和.Dispose()调用之间的区别

met*_*mad 0 c#

我最近一直在使用Using,但我想知道它与明确调用.Dispose()有什么不同.例如,之间的区别是:

using (DisposableTest obj = new DisposableTest()) { /* Some code */ }
Run Code Online (Sandbox Code Playgroud)

DisposableTest obj = new DisposableTest();
// Some code
obj.Dispose();
Run Code Online (Sandbox Code Playgroud)

假设DisposableTest实现IDisposable?

GS *_*ica 6

带有using关键字的第一个版本确保obj即使中间的代码抛出异常也会处理掉.这就像使用一个try finally块但不那么冗长.


Kat*_*uro 5

它们有两种不同之处:

  1. using 创建一个新的范围.

  2. using调用.Dispose()无论控件如何离开块(如果该对象在该点不为空).它与编写一个try/ finally构造相同,它.Dispose()finally块中放置"if not null then " ,但是以表示intent的格式.

它存在,以便如果控制以任何方式离开块(发生异常returnbreak遇到或遇到),.Dispose()仍然会调用它.它也更具表现力,因为它更好地表明程序员对此案例的意图而不是通用try/ finally构造.