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指令)

这是一个较短的语法,用于确保调用dispose:

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块非常有用的原因。否则,您必须输入大量错误处理代码
关键是,对于许多具有Dispose方法的对象,错误处理尤其重要。对于我们的许多代码,我们不需要错误处理;错误发生的后果并不是一个真正的问题。但是对于这些IDisposable对象,错误往往是一个问题,可能是一个大问题。因此,.Net提供了为忙碌的开发人员添加最基本的错误处理并继续进行的语法。始终至少从使用块开始;也许以后您将转到更高级的错误处理,但至少您已经获得了这种基本的安全性

这是一个。

的“使用”关键字有助于在.net中安全、清晰地完成某件事情。这是对某些对象的属性处理。您可能已经了解了在.net中我们是如何进行垃圾收集的,这意味着对于许多对象,我们在使用完它们后不必关心它们。但是,其他对象需要对它们调用方法最佳实践是,每当一个对象有Dispose方法时,我们应该在处理完该对象后调用该方法

(它们通常会处理。这意味着它使用的内存或其他计算机部件超出了.NET运行时的控制范围。因此,当垃圾回收到达丢弃的.NET对象时,它无法正确释放这些资源。这可能会导致内存泄漏和其他各种问题。ADO.NET Connec就是一个很好的例子重复不处理连接对象可能会导致数据库问题。)

Using关键字也与此“Dispose”方法相关联。更准确的说法是,当对象具有Dispose方法时,我们可以(a)调用.Dispose,或者(B)。