Ich habe zwei Klassen:Entsorgung Basisklasse vor der Klasse geerbt
public abstract class UnitOfWorkBase: IDisposable { }
public sealed class UnitOfWorkSql: UnitOfWorkBase { }
Die Dispose
Methode der abgeleiteten Klasse normalerweise wie folgt aussieht:
protected override void Dispose (bool disposing)
{
if (!this.Disposed)
{
if (disposing)
{
// Managed.
}
// Unmanaged.
this.Disposed = true;
}
base.Dispose(disposing);
}
ich immer den Anruf zu base.Dispose(disposing)
gesehen habe an das Ende der Methode. Doch in einem aktuellen Szenario besteht ein Bedarf an Objekten der Basisklasse, bevor Objekte in der abgeleiteten Klasse zu verfügen wie folgt:
protected override void Dispose (bool disposing)
{
base.Dispose(disposing);
if (!this.Disposed)
{
if (disposing)
{
// Managed.
}
// Unmanaged.
this.Disposed = true;
}
}
Ich bin nicht sicher, ob diese schlechte Praxis betrachtet wird. Gibt es etwas, auf das man achten sollte?
Ich vermute, dass Sie diese Variante nicht sehen, weil es ungewöhnlich ist, diese Anforderung zu haben - könnten Sie ein bisschen mehr Details darüber, warum die Basisklasse * * zuerst 'Dispose' muss, teilen? Es würde darauf hindeuten, dass Sie einige Gruppen von Klassen mit ungewöhnlichen Lebenszeiten oder Beziehungen haben. –
@Damien_The_Unbeliever: Ich werde den Kontext in einer Follow-up-Nachricht erklären. Siehst du in der Zwischenzeit irgendwelche allgemeinen Probleme mit dieser Variante? –
@Damien_The_Unbeliever: Die 'UnitOfWorkBase' Klasse enthält ein generisches' IDbTransaction' Objekt während die 'UnitOfWorkSql' Klasse ein konkretes' DbContext' Objekt enthält. Ich habe beschlossen, das Transaktionsobjekt in der Basisklasse zu belassen, da alle vorhersehbaren Datenbankplattformen IDbTransaction verwenden. Außerdem möchte ich das tatsächliche Transaktionsobjekt nicht als "öffentlich" oder "geschützt" offen legen. Die 'UnitOfWorkSql'-Klasse wird also immer in eine' using'-Anweisung eingebunden, während das 'private'-Transaktionsobjekt zuerst entsorgt werden muss. Hoffnung, die Sinn macht. –