3

我在本网站或 CodeProject 上的某处读到,好的规则是,如果某个类实现了 IDisposable 接口,那么您应该使用 using 关键字,因为使用转换为 MSIL 的关键字会尝试/最终阻止类似这样的内容:

try
{
   //some logic 
}
finally
{
   if (obj != null)
      {
         obj.Dispose();
      }
}

但是在观看 Entity Framework 的教程时,我遇到了这样的事情:

using(SampleBEntities db = new SampleBEntities()){//some logic here} 

SampleBEntities 继承自 ObjectContext 并且在 MSDN lib ObjectContext 中没有实现 IDisposable?

4

1 回答 1

6

是的,它确实实现了IDisposable接口。

public class ObjectContext : IDisposable

查看MSDN

它具有Dispose()来自实现IDisposable接口的方法。

如果它没有按照你所说的那样实现,让它单独运行,它甚至不会编译。

使用语句

Using 定义了一个范围,一个或多个对象将在该范围之外被释放。

C# 通过 .NET Framework 公共语言运行时 (CLR) 自动释放用于存储不再需要的对象的内存。内存的释放是不确定的;每当 CLR 决定执行垃圾回收时,就会释放内存。

using 语句允许我们指定使用资源的对象何时应该释放它们。提供给 using 语句的对象必须实现 IDisposable 接口。该接口提供了 Dispose 方法,该方法应该释放对象的资源。

当到达 using 语句的末尾或抛出异常并且控制在语句结束之前离开语句块时,可以退出 using 语句。

于 2012-07-03T18:32:25.163 回答