我看到很多这样的代码:
public class MyWcfService : IMySerciceContract, IDisposable
{
private DatabaseOperations _dataAccess;
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
_dataAccess.Dispose();
}
}
MyWcfService 类将托管在 IIS 或 WAS 中,没有人会在其中显式调用 Dispose。我的想法是让这个类实现 IDisposable 是没有意义的,你最好将 _dataAccess 的使用包装在 using 语句中。据我了解,实现 IDisposable 的类的期望是该类的用户将在 using 块声明中实例化它。考虑到没有用户会显式调用 Dispose,上述示例是否是不好的做法?如果我们像上面的例子一样依赖 GC 来清理,GC 是调用 Dispose,还是只是调用 finalizer?