c#在托管和非托管资源中使用关键字

本文关键字:关键字 资源 | 更新日期: 2023-09-27 17:50:31

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

我不知道什么时候使用using关键字。

例如,使用用于管理资源,如Connection对象。

用于非托管资源,如:

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

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

c#在托管和非托管资源中使用关键字

使用using有一般的经验法则吗?

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

从MSDN:

作为一条规则,当你使用一个IDisposable对象时,你应该在using语句中声明并实例化它。using语句以正确的方式调用对象上的Dispose方法,并且(当您像前面所示的那样使用它时)在调用Dispose时,它还会导致对象本身超出作用域。在using块中,对象是只读的,不能修改或重新分配。

通常应该在类实现IDisposable时使用。但是,在某些极端情况下需要避免使用它,例如在使用WCF时,如下所述。此外,如果您需要访问类中的其他地方的对象,您不能使用using,因为它限制了对象的范围,因此您应该显式地处置您的对象。

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

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

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

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

尽管可能会有异常,但我认为你可以放心地假设,当一个类实现了IDisposable时,你应该在处理完对象后调用Dispose。

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

亲切的问候,Marwijn .