这个问题已经有一个答案在这里:

是什么目的使用的框在C#?它是如何不同,从一个地方变量?

有帮助吗?

解决方案

如果该类型实现IDisposable,这自动处理它。

鉴于:

public class SomeDisposableType : IDisposable
{
   ...implmentation details...
}

这些都是等同的:

SomeDisposableType t = new SomeDisposableType();
try {
    OperateOnType(t);
}
finally {
    if (t != null) {
        ((IDisposable)t).Dispose();
    }
}

using (SomeDisposableType u = new SomeDisposableType()) {
    OperateOnType(u);
}

第二是更容易阅读和维护。

其他提示

Using 电话 Dispose()using-块左,即使码扔出一个例外。

所以你通常的使用 using 课程需要清理后他们,就像IO.

所以,使用这块:

using (MyClass mine = new MyClass())
{
  mine.Action();
}

会做同样的为:

MyClass mine = new MyClass();
try
{
  mine.Action();
}
finally
{
  if (mine != null)
    mine.Dispose();
}

使用 using 是的方式更短和更容易阅读。

从MSDN:

C#通过。净共同框架 语言运行(CLR),自动 版本的存储器可用来存储 对象不再需要。在释放记忆 非确定性;存储器被释放 每当CLR决定执行 垃圾收集。然而,它是 通常最好放限制 资源,如文件处理和 网络连接的尽快 可能的。

所使用的声明的允许 程序员指定对象时 使用资源应该释放 它们。对象提供的使用 声明必须实现的 IDisposable接口。这个界面 提供的处理方法,该方法 应该释放对象的资源。

换句话说, using 声明的告诉。净释放的对象的指定 using 方框一旦它不再需要。

所使用的语句被用来作用的对象在C#实现 IDisposable 接口。

IDisposable 接口有一个公共的方法称为 Dispose 那是用来处置的对象。当我们使用的用语句,我们不需要明确处理的对象在代码中,使用声明需要照顾它。

using (SqlConnection conn = new SqlConnection())
{

}

当我们使用上述方框内的代码是产生这样的:

SqlConnection conn = new SqlConnection() 
try
{

}
finally
{
    // calls the dispose method of the conn object
}

更多详细信息: 了解使用声明在C#.

还注意到,目实例通过 using 是的只读内使用区块。请参阅官方C#参考 在这里,.

把代码中使用框确保对象是设置的(尽管不一定收集)尽快控制离开块。

using (B a = new B())
{
   DoSomethingWith(a);
}

相当于

B a = new B();
try
{
  DoSomethingWith(a);
}
finally
{
   ((IDisposable)a).Dispose();
}

这是真的只是一些syntatic糖不需要你到明确呼吁在处理各位成员,执行IDisposable.

所使用的声明获得一个或更多的资源,执行一个发言,然后处置的资源。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top