怎么做清理?

use*_*348 1 c# oop inheritance dispose

我有这个代码.

一个基类,用于创建上下文的新实例.

public class Base
{
      private Entities context;

      public Base()
      {
            context = new Entities();
      }
}
Run Code Online (Sandbox Code Playgroud)

而且比从这个类继承的类.

public class SomeService : Base
{

      public Gallery Get(int id)
      {
           return context.GallerySet.FirstOrDefault(g => g.id == id);
      }
}
Run Code Online (Sandbox Code Playgroud)

问题是,如何处理上下文对象?我在考虑基类中的析构函数,我只是调用上下文对象的dispose方法.

~Base()
{
    context.Dispose();
}
Run Code Online (Sandbox Code Playgroud)

会这样够吗?或者还有其他方法来处理上下文对象吗?

Jon*_*eet 6

您的Base类应该实现IDisposable而不是终结器.当您可以直接访问非托管资源时(例如,表示Windows句柄的IntPtr),您应该只有终结器.

但是,我会尝试设计一个不涉及此问题的设计.在可能的情况下,我尽量避免使用需要处理的成员变量 - 我倾向于在方法中获取资源,将这些资源传递给其他方法,然后在获取它们的同一方法中处理它们.IDisposable您拥有的实现越少,您可能需要管理的资源生命周期复杂性就越低.显然有时它是不可避免的......