1

Ich erstelle eine abstrakte Klasse, die in einer Teilklasse einer LINQ to SQL-Klasse vererbt werden kann. Die LINQ to SQL-Klasse enthält eine Reihe von integrierten partiellen Methoden. Gibt es eine Möglichkeit, eine oder mehrere Teilmethoden in der abstrakten Klasse zu implementieren? Ich weiß, dass partielle Methoden nur in partiellen Klassen oder Strukturen enthalten sein können. Ich bin mir sicher, dass es einen anderen Weg geben muss, es zu tun.Partielle Methode innerhalb der abstrakten Klasse (C#)

Hier genauer:

  • ich eine Datenbanktabelle Nachrichten genannt haben. Wenn ich eine LINQ to SQL-dbml-Datei mit dieser Tabelle erstelle, generiert der automatisch generierte Code eine partielle Klasse für News.
  • Diese Teilklasse enthält mehrere Teilmethoden.
  • Ich habe eine Klasse, die ich erstelle, die mehrere Methoden enthält, die ich über alle meine LINQ to SQL-Klassen verwenden möchte.
  • Eine dieser Methoden ist eine partielle Methode, die jeder LINQ to SQL-Klasse hinzugefügt wird. Ich habe einen gemeinsamen Körper für diese Methode zu verwenden. Anstatt diese Methode jeder partiellen Klasse hinzuzufügen, suche ich nach einer Möglichkeit, sie einmal zu erstellen und sie mit meiner Basisklassenvererbung zu erben.

Hoffe, dass hilft mehr zu erklären.

Antwort

1

Partielle Methoden sind nicht vererbbar. Sie könnten der abstrakten Basisklasse zwar normale Methoden hinzufügen, sie werden jedoch nicht automatisch mit den partiellen Methodendeklarationen "gekoppelt". Also: nein. Sie können die partielle Methodenimplementierung natürlich einfach in die Basisklasse aufrufen lassen.

Beachten Sie auch, dass, wenn der gemeinsame Code bezieht sich auf Dinge wie Audit (wer/wann), können Sie dies auch durch die DataContext ‚s SubmitChanges Methode überschrieben, 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 Ihre Entitäten in der dbml angeben können (like so); Sie müssen es nicht in jeder Teilklasse von Hand machen.

0

Ich denke, ich verstehe, was Sie tun möchten, aber wenn nicht, lass es mich wissen. Sie können Ihre abstrakte Basisklasse partiell machen und die gewünschte Implementierung in diese Klasse ziehen. Alternativ könnten Sie Ihre abstrakte Klasse verwenden und die Funktionalität kapseln, auf die Ihre untergeordneten Klassen zugreifen sollen.