Frage

Ich erstelle eine abstrakte Klasse, die in einer Teilklasse eines LINQ to SQL-Klasse geerbt werden kann. Die LINQ to SQL-Klasse enthält eine Reihe von integrierten in Teilverfahren. Gibt es eine Möglichkeit, dass ich eine oder mehrere der Teilverfahren in der abstrakten Klasse implementieren kann? Ich weiß, dass Teil-Methoden können nur innerhalb von Teil Klassen oder Strukturen enthalten sein. Ich bin sicher, es muß ein anderer Weg, um es zu tun.

Hier ist detaillierter:

  • Ich kann eine Datenbanktabelle namens Nachrichten. Wenn ich eine LINQ to SQL dbml Datei enthält diese Tabelle, die automatisch generierten Code erstellen erzeugt eine partielle Klasse für Nachrichten.
  • Diese partielle Klasse enthält mehrere Teilverfahren.
  • Ich habe eine Klasse, die ich Gebäude bin, die mehrere Methoden enthält, die Ich mag würde über alle meine LINQ to SQL-Klassen verwenden.
  • Eine dieser Methoden ist eine partielle Methode jeder LINQ to SQL-Klasse hinzugefügt. Ich habe einen gemeinsamen Körper für diese Methode zu verwenden. Anstatt diese Methode, um jede Teilklasse hinzufügen, ich bin auf der Suche nach einer Möglichkeit, es einmal zu erstellen und es mit meiner Basisklasse Erbe erben.

Hoffnung, dass mehr hilft erklären.

War es hilfreich?

Lösung

Partial Methoden sind über Vererbung nicht verwendbar. Sie könnten regelmäßige Methoden der abstrakten Basisklasse hinzufügen, aber sie werden nicht automatisch „Paar“ mit den Teilverfahren Erklärungen. Also: nein. Sie können natürlich einfach den Teil-Call-Methode Implementierung haben in der Basisklasse.

Beachten Sie auch, dass, wenn der gemeinsame Code bezieht sich auf Dinge wie Audit (wer / wann), können Sie auch diese DataContext Methode des durch Überschreiben der SubmitChanges tun können, und ruft GetChangeSet:

    public override void SubmitChanges(ConflictMode failureMode)
    {
        ChangeSet delta = GetChangeSet();
        //... use delta.Updates, delta.Inserts and delta.Deletes
        base.SubmitChanges(failureMode);
    }

Schließlich ist zu beachten, dass Sie auch eine gemeinsame Basisklasse für alle Einheiten in der dbml ( wie so ); Sie nicht zu tun haben, um es von Hand in jeder Teilklasse.

Andere Tipps

Ich glaube, ich verstehe, was Sie tun wollen, aber wenn nicht, lassen Sie mich wissen. Sie können Ihre abstrakte Basisklasse Teil und ziehen Sie die Implementierung Sie wollen bis in diese Klasse. Alternativ können Sie Ihre abstrakte Klasse nehmen und kapseln die Funktionalität, die Sie Ihr Kind Klassen wollen Zugang zu haben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top