C#内存管理(九)

IDisposible

使用IDisposable接口的Dispose()方法做清理工作。因此如果我们有一个ResouceUser的类使用到了终结器(finalizer),如下:

public class ResourceUser {
  ~ResourceUser () // THIS IS A FINALIZER
  {
    // DO CLEANUP HERE
  }
}

那么我们可以使用IDisposable来实验同样的功能:

public class ResourceUser : IDisposable {
  #region IDisposable Members
  public void Dispose () {
    // CLEAN UP HERE!!!
  }
  #endregion
}

IDisposable已经被集成到了关键字中。在using()的最后Dispose()的代码块会被调用。对象不应该在Dispose()的代码块后被引用,因为它被标上了”gone”并且准备被垃圾回收器回收。

public static void DoSomething () {
  ResourceUser rec = new ResourceUser();
  using (rec) {
    // DO SOMETHING
  } // DISPOSE CALLED HERE
  // DON'T ACCESS rec HERE
}

我喜欢把代码放在using块内,这样所有的变量和资源在块结束后回被自动回收(主要是因为using关键字扩展了后是try … finally …, 而所有的具有IDisposable接口的对象的Dispose()方法会在finally的代码块中被自动调用)。

public static void DoSomething () {
  using (ResourceUser rec = new ResourceUser()) {
    // DO SOMETHING
  } // DISPOSE CALLED HERE
}

通过实现类的IDisposible接口,这样我们可以在垃圾回收器前通过强制方式释放我们的对象。

你可能感兴趣的:(工作,C#,Class,Access,扩展,UP)