我应该使用ObjectContext的关键字吗?

Fil*_*lip 3 c# asp.net entity-framework

我已经阅读过这个网站或CodeProject的某个地方,好的规则是,如果某个类已经实现了IDisposable接口而且只有你应该使用关键字,因为使用关键字翻译成MSIL是try/finally阻止这样的事情:

try
{
   //some logic 
}
finally
{
   if (obj != null)
      {
         obj.Dispose();
      }
}
Run Code Online (Sandbox Code Playgroud)

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

using(SampleBEntities db = new SampleBEntities()){//some logic here} 
Run Code Online (Sandbox Code Playgroud)

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

Nik*_*wal 6

是的它确实实现了IDisposable接口.

public class ObjectContext : IDisposable
Run Code Online (Sandbox Code Playgroud)

检查MSDN

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

如果它没有实现你所说的单独运行,它甚至不会编译.

使用陈述

使用定义范围,在该范围之外将放置一个或多个对象.

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

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

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