C# using语句的用法
可能的重复项:C# using语句的用法,c#,using,C#,Using,可能的重复项: 正确地说,我将如何使用using语句?我有一个教程打开,我不明白它。我可以看到不止一种不同的实现方法。哪种方法是正确的或受欢迎的?using语句适用于实现IDisposable的任何对象 using (var my_object = new IDisposableObject ()) { //do my_object code here. } //once the program reaches here, it calls my_object.Dispose
正确地说,我将如何使用
using
语句?我有一个教程打开,我不明白它。我可以看到不止一种不同的实现方法。哪种方法是正确的或受欢迎的?using语句适用于实现IDisposable的任何对象
using (var my_object = new IDisposableObject ())
{
//do my_object code here.
} //once the program reaches here, it calls my_object.Dispose();
通常,这用于具有连接的对象,这些连接在程序完成时需要手动处理(关闭)。例如,打开到文件和数据库的连接
即使代码中有错误,using语句也将调用Dispose,因此它类似于在try-catch语句的finally块中调用Dispose方法
using语句适用于实现IDisposable的任何对象
using (var my_object = new IDisposableObject ())
{
//do my_object code here.
} //once the program reaches here, it calls my_object.Dispose();
通常,这用于具有连接的对象,这些连接在程序完成时需要手动处理(关闭)。例如,打开到文件和数据库的连接
即使代码中有错误,using语句也将调用Dispose,因此它类似于在try-catch语句的finally块中调用Dispose方法
有两种基本方法可以使用
using
语句。从MSDN中提取
- 为命名空间创建别名(使用别名)
- 允许在命名空间中使用类型,这样,您就不必限定在该命名空间中使用类型(using指令)
using
语句。从MSDN中提取
- 为命名空间创建别名(使用别名)
- 允许在命名空间中使用类型,这样,您就不必限定在该命名空间中使用类型(using指令)
using (File f = File.Open("..."))
{
}
与
File f;
try
{
f = File.Open("...");
}
finally
{
f.Dispose();
}
这是确保调用dispose的较短语法:
using (File f = File.Open("..."))
{
}
与
File f;
try
{
f = File.Open("...");
}
finally
{
f.Dispose();
}
为了扩展Kevin的答案,using语句有效地将对象实例化封装在try/finally块中,调用finally部分中的object Dispose()方法,即
using(myObject m = new myObjecyt())
{
// Code here
}
与
myObject m = new myObjecyt()
try
{
// Code here
}
finally
{
m.Dispose();
}
可以通过检查MSIL来验证这一点。只是为了扩展Kevin的答案,using语句有效地将对象实例化封装在try/finally块中,调用finally部分中的object Dispose()方法,即
using(myObject m = new myObjecyt())
{
// Code here
}
与
myObject m = new myObjecyt()
try
{
// Code here
}
finally
{
m.Dispose();
}
这可以通过检查MSIL来验证。关键字“Using”有助于在.net中安全、清晰地完成某些事情。这是对某些对象的适当处置。您可能已经了解了在.Net中我们是如何进行垃圾收集的,这意味着对于许多对象,当我们使用完它们时,我们不必关心它们。但是,其他对象需要有一个名为Dispose的方法。最佳实践是,每当对象具有Dispose方法时,我们都应该在处理完该对象后调用该方法
(它们通常会处理。这意味着它使用的内存或其他计算机部件超出了.NET运行时的控制范围。因此,当垃圾回收到达丢弃的.NET对象时,它无法正确释放这些资源。这可能会导致内存泄漏和其他各种问题。ADO.NET Connec就是一个很好的例子重复不处理连接对象可能会导致数据库问题。)
Using关键字也与此“Dispose”方法相关联。更准确的说法是,当对象具有Dispose方法时,我们可以(a)调用。当我们处理完Dispose后,我们可以调用它,或者(B)将使用该对象的代码放在Using block中。Using block为您做了几件事:
- 当代码移出块时,将自动为您调用重要的Dispose方法
- 更重要的是,如果代码块中有错误,仍然会调用Dispose方法。这就是为什么using块非常有用的原因。否则,您必须输入大量错误处理代码