Was ist der beste Weg, eine Strategie für den Konstruktor einer Vorlage/abstrakten Klasse in C# zu implementieren? Ich habe mehrere Klassen, die alle auf der Analyse einer Zeichenfolge im Konstruktor basieren. Das Parsen erfolgt in einer statischen Methode, die eine Liste von Schlüsselwertpaaren erstellt und allen Klassen gemeinsam ist, aber einige Felder sind auch für alle Klassen üblich - daher verwende ich eine abstrakte Template-Klasse.Implementieren einer Strategie für den Konstruktor
Das Problem ist, dass ich keine Möglichkeit sehe, die Implementierung des Konstruktors der abstrakten Basisklasse zu erben. Andernfalls würde ich die Konstruktorstrategie in der Basisklasse implementieren und die Handhabung der Listen in einigen abstrakten Methoden erzwingen.
Edit: Added Problem Code für die Template-Klasse
public abstract class XXXMessageTemplate
{
public XXXMessageTemplate(string x) // implementation for the constructor
{
Parse(x);//general parse function
CommonFields();//filling common properties
HandlePrivateProperties();//fill individual properties
HandlePrivateStructures();//fill individual structures
}
abstract void HandlePrivateProperties();
abstract void HandlePrivateStructures();
}
The actual messages should not implement any constructor and only implement the HandlePrivateProperties and HandlePrivateStructures functions.
Ich habe ein Pseudo-Code hinzugefügt, um den Emittenten sauberer zu machen ... – weismat
O k - das bedeutet, dass meine Intension unmöglich ist, das Strategie-Muster hier zu erzwingen - ich muss dann einen Konstruktor implementieren, der einen geschützten Funktionsnamen-Konstruktor aufruft, der dann die Handle-Funktionen aufruft. Erinnert mich an die Einschränkung, dass ein Konstruktor kein anderes Konstrukt einer Klasse aufrufen kann. – weismat
Konstruktoren können Konstruktoren anderer Klassen aufrufen - Sie können beispielsweise "object o = new object()" schreiben. Sie können nicht versuchen, einen anderen Konstruktor als Teil Ihrer eigenen Konstruktorkette zu verwenden - das wäre nicht sehr sinnvoll. –