【发布时间】:2010-02-11 19:25:18
【问题描述】:
using 语句有什么作用?真的需要吗?
using (MyWebservice x = new MyWebservice())
{
//random code
}
【问题讨论】:
标签: .net asp.net web-services memory-management using-statement
using 语句有什么作用?真的需要吗?
using (MyWebservice x = new MyWebservice())
{
//random code
}
【问题讨论】:
标签: .net asp.net web-services memory-management using-statement
http://msdn.microsoft.com/en-us/library/yh598w02.aspx
using 语句可确保调用 Dispose,即使在您调用对象上的方法时发生异常也是如此。您可以通过将对象放在 try 块中,然后在 finally 块中调用 Dispose 来获得相同的结果;事实上,编译器就是这样翻译 using 语句的。
【讨论】:
不,不需要。我们的网络服务专家使用它只是为了确保您的注意力。
【讨论】:
disposable pattern 是 syntactic sugar。编译后,它会扩展为生成的 IL 代码中的完整模式。
您在() 中初始化的对象将在超出范围时调用Dispose 方法。这就是为什么只有实现IDisposable 的类才能使用它的原因。
请参阅MSDN article 了解它。
【讨论】:
要回答您的问题“using 语句有什么作用?”,这里有一些示例来说明 using 语句的更常见用法,以确保其他答案中引用的处置:
确保在我们使用完 StringWriter 和 XmlTextWriter 后,它们已被释放(关闭):
using (StringWriter sw = new StringWriter(sb))
using (XmlTextWriter xw = new XmlTextWriter(sw))
{
WebPartManager1.ExportWebPart(partToExport, xw);
}
确保数据库连接和命令对象都被释放:
DataTable dt = new DataTable();
using (SqlConnection connection = new SqlConnection("ConnectionString"))
using (SqlCommand command = new SqlCommand())
{
command.Connection = connection;
command.CommandText = "SELECT * FROM Customers";
connection.Open();
using (SqlDataReader reader = command.ExecuteReader(CommandBehavior.CloseConnection))
{
dt.Load(reader);
}
}
【讨论】: