【发布时间】:2016-08-16 08:35:20
【问题描述】:
我有两个班级:
public abstract class UnitOfWorkBase: IDisposable { }
public sealed class UnitOfWorkSql: UnitOfWorkBase { }
派生类的Dispose 方法通常如下所示:
protected override void Dispose (bool disposing)
{
if (!this.Disposed)
{
if (disposing)
{
// Managed.
}
// Unmanaged.
this.Disposed = true;
}
base.Dispose(disposing);
}
我总是在方法结束时看到对base.Dispose(disposing) 的调用。但是,在最近的情况下,需要在派生类中的对象之前处理基类的对象,如下所示:
protected override void Dispose (bool disposing)
{
base.Dispose(disposing);
if (!this.Disposed)
{
if (disposing)
{
// Managed.
}
// Unmanaged.
this.Disposed = true;
}
}
我不确定这是否被认为是不好的做法。有什么要注意的吗?
【问题讨论】:
-
我怀疑你没有看到这个变体,因为有这个要求是不寻常的 - 你能否分享更多关于为什么基类需要到
Dispose的细节?这往往表明您有一些具有不寻常生命周期或关系的类集。 -
@Damien_The_Unbeliever:我将在后续消息中解释上下文。同时,您是否发现此变体存在任何一般性问题?
-
@Damien_The_Unbeliever:
UnitOfWorkBase类包含一个通用的IDbTransaction对象,而UnitOfWorkSql类包含一个具体的DbContext对象。我选择将事务对象保留在基类中,因为所有可预见的数据库平台都将使用IDbTransaction。此外,我不想将实际事务对象公开为public或protected。所以UnitOfWorkSql类总是包装在using语句中,而private事务对象需要首先被释放。希望这是有道理的。
标签: c# .net inheritance dispose idisposable