0

using 关键字用于正确处理托管和非托管资源。

我对何时使用 using 关键字感到困惑。

例如 using 用于托管资源,例如 Connection 对象。

它用于非托管资源,例如:

   using (Font font1 = new Font("Arial", 10.0f)) 
   {
       byte charset = font1.GdiCharSet;
   }

何时使用 using 关键字有一般的经验法则吗?是否应该将其用于所有对象,以便正确处理它们?您如何判断哪些对象是 using 关键字的主要候选对象?

4

4 回答 4

5

何时使用 using 是否有一般的经验法则?

IDisposable无论资源是托管还是非托管,您都应该在任何实现 的类上使用它。

来自MSDN

通常,当您使用 IDisposable 对象时,您应该在 using 语句中声明和实例化它。using 语句以正确的方式调用对象的 Dispose 方法,并且(当您如前所示使用它时)它还会导致对象本身在调用 Dispose 时立即超出范围。在 using 块中,对象是只读的,不能修改或重新分配。

于 2013-01-03T21:07:13.147 回答
1

通常,您应该在类实现时使用它IDisposable。但是,有一些边缘情况需要避免,例如当您使用WCF 时,如此处所述。此外,如果您需要在类中的其他位置访问该对象,则不能使用using,因为它限制了对象的范围,因此您应该显式处理您的对象。

于 2013-01-03T21:09:35.600 回答
0

我的一般经验法则:如果可以使用,请使用它。

什么时候可以使用?简而言之,当对象实现IDisposable并且您在方法结束时完成使用它时。

一个值得注意的例外是 Web 服务客户端(例如 WCF 服务)——默认实现可能导致真正的错误消息丢失。(例如参见http://www.codeproject.com/Tips/197531/Do-not-use-using-for-WCF-Clients

于 2013-01-03T21:08:50.257 回答
0

上面描述的 using 关键字将在 font1 超出范围时简单地调用 Dispose 。

尽管可能会有例外,但我认为您可以安全地假设当一个类实现 IDisposable 时,您应该在完成对象后调用 Dispose。

上面显示的结构将为您做到这一点。在其他情况下,您可能无法使用 using,因为对象的生命周期超过了创建它的函数的生命周期。在这种情况下,明智的做法是手动处置它。

亲切的问候,马尔维恩。

于 2013-01-03T21:13:09.510 回答