0
類
之前,我有兩個類:處置基類繼承
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;
}
}
我不知道,如果這被認爲是不好的做法。有什麼需要注意的嗎?
我懷疑你沒有看到這個變體,因爲有這個需求是不常見的 - 你可以分享一些關於爲什麼基類*需要*的細節來首先處理?這往往表明你有一些具有不尋常的生命週期或關係的類。 –
@Damien_The_Unbeliever:我將在後續消息中解釋上下文。與此同時,你看到這個變體的一般陷阱嗎? –
@Damien_The_Unbeliever:'UnitOfWorkBase'類包含一個通用的'IDbTransaction'對象,而'UnitOfWorkSql'類包含一個具體的'DbContext'對象。我選擇將事務對象保留在基類中,因爲所有可預見的數據庫平臺都將使用'IDbTransaction'。另外,我不想將實際的交易對象公開爲'public'或'protected'。所以'UnitOfWorkSql'類總是包裝在'using'語句中,而'private'事務對象需要首先處理。希望這是有道理的。 –