我什么时候应该使用using语句?

Jon*_*ens 8 .net c# using-statement

可能重复:
什么是C#使用块,为什么要使用它?

我正在将旧网站转换为C#,我不确定何时应该使用'使用'.有没有一般指导方针?我知道它的好处,但我并不是100%确定如何使用它.是每次我'新'的方法/财产?

SqlConnection awesomeConn = new SqlConnection(connection);
Run Code Online (Sandbox Code Playgroud)

Jac*_*ope 20

如果一个类实现,IDisposable那么它将创建一些非托管资源,当你使用它们时需要将它们"处理掉".所以你会做类似的事情:

SqlConnection awesomeConn = new SqlConnection(connection);

// Do some stuff

awesomeConn.Dispose();
Run Code Online (Sandbox Code Playgroud)

为了避免忘记处理资源(在这种情况下关闭数据库连接),特别是在抛出异常时,您可以使用using语法在退出using语句的范围时自动调用dispose:

using (SqlConnection awesomeConn = new SqlConnection(connection))
{
     // Do some stuff
} // automatically does the .Dispose call as if it was in a finally block
Run Code Online (Sandbox Code Playgroud)

实际上,using块相当于:

try
{
    SqlConnection awesomeConn = new SqlConnection(connection);

    // do some stuff
}
finally 
{
    awesomeConn.Dispose();
}
Run Code Online (Sandbox Code Playgroud)


gdo*_*ica 7

MSDN:

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

using语句确保即使在对象上调用方法时发生异常,也会调用Dispose.您可以通过将对象放在try块中然后在finally块中调用Dispose来实现相同的结果; 实际上,这就是编译器如何翻译using语句.前面的代码示例在编译时扩展为以下代码(注意额外的花括号以创建对象的有限范围):

例:

using (StreamReader stream = new StreamReader("path")) 
{
     string line = stream.ReadLine();
}
Run Code Online (Sandbox Code Playgroud)


Bea*_*ker 0

如果您想自动处理对象,通常会使用它。否则你必须手动调用 myobj.Dispose() 。

请参阅此处的参考文档:http://msdn.microsoft.com/en-us/library/yh598w02.aspx