我将旧网站转换为C#,我不知道何时应该使用'使用'。有没有一般指导方针?我知道它的好处,但我不能100%确定如何使用它。是每次我新的'方法/属性?
SqlConnection awesomeConn = new SqlConnection(connection);
答案 0 :(得分:19)
如果一个类实现了IDisposable
,那么它将创建一些非托管资源,当你使用它们时需要将它们“处理掉”。所以你会做类似的事情:
SqlConnection awesomeConn = new SqlConnection(connection);
// Do some stuff
awesomeConn.Dispose();
为了避免忘记处理资源(在这种情况下关闭数据库连接),特别是在抛出异常时,您可以使用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
实际上,使用块等同于:
try
{
SqlConnection awesomeConn = new SqlConnection(connection);
// do some stuff
}
finally
{
awesomeConn.Dispose();
}
答案 1 :(得分:7)
MSDN:
通常,当您使用IDisposable对象时,您应该声明和 在using语句中实例化它。 using语句调用 以正确的方式处理对象的方法,以及(当您使用它时) 如前所示)它也会导致对象本身超出范围 只要调用Dispose。在使用块中,对象是 只读,无法修改或重新分配。
using语句确保即使调用Dispose也会调用 在对象上调用方法时会发生异常。您可以 通过将对象放在try块中来实现相同的结果 然后在finally块中调用Dispose;其实这是怎么回事 using语句由编译器翻译。代码示例 之前在编译时扩展为以下代码(请注意额外的 花括号来创建对象的有限范围):
示例:
using (StreamReader stream = new StreamReader("path"))
{
string line = stream.ReadLine();
}
答案 2 :(得分:1)
对实例化IDisposable实例化的所有对象使用use,除非它们的生命周期超出当前执行范围(即方法调用)。在这种情况下,例如,如果你有一个一次性成员变量,那么包含类应该在其Dispose中实现IDisposable和Dispose成员。
答案 3 :(得分:0)
如果您想自动处理对象,通常会使用它。否则你必须手动调用myobj.Dispose()。
请参阅此处的参考文档:http://msdn.microsoft.com/en-us/library/yh598w02.aspx
答案 4 :(得分:0)
使用是一种方便,可以确保您不会在不处理资源的情况下退出块。只要您必须在本地代码块中使用IDisposable实现程序,就可以并且应该使用它。