Frage

Grüße,

Ich habe ein bestimmtes Objekt, das aus einer Datei aufgebaut werden kann, wie zum Beispiel:

public class ConfigObj
{
     public ConfigObj(string loadPath)
     {
          //load object using .Net's supplied Serialization library
          //resulting in a ConfigObj object
          ConfigObj deserializedObj = VoodooLoadFunction(loadpath); 

          //the line below won't compile
          this = thisIsMyObj; 
     }
}

Ich möchte, in essense, sagen „ok, und jetzt das Objekt, das wir gerade deserialisiert haben, das ist das Objekt, das wir in der Tat.“ Es gibt ein paar Möglichkeiten, dies zu tun, und ich frage mich, was eine Best-Practice angesehen wird. Meine Ideen sind:

  • Erstellen Sie eine Kopie-in-me-Funktion durch Feld, das kopiert das Objektfeld. Dies ist die aktuelle Implementierung und ich bin mir ziemlich sicher, dass sein eine schreckliche Idee, da, wenn ein neues Mitglied in das Objekt hinzugefügt wird, muß ich auch an die ‚copy-in-me‘ Funktion hinzufügen erinnern, und es gibt keine Möglichkeit, dass wartbar ist .
  • Erstellen Sie eine statische Methode für die ConfigObj Klasse, die zum Laden des Objekts als de-facto-Konstruktor wirkt. Das klingt viel besser, aber nicht sehr Best-Practice-y.

Ich bin nicht ganz glücklich mit einem der beiden, though. Was ist die anerkannt beste Praxis hier?

War es hilfreich?

Lösung

Die zweite Möglichkeit ist es, was ein Factory-Methode rel="nofollow genannt wird und eine gemeinsame Design-Technik ist. Wenn Sie diese Technik zu tun verwenden, können Sie feststellen, dass Sie die Art der Klasse wissen müssen Sie laden, bevor Sie tatsächlich die Klasse laden. Wenn Sie in dieser Situation ausführen, können Sie eine höhere Art der Fabrik verwendet werden, die im Stream sieht und ruft die Factory-Methode für den entsprechenden Typ der Klasse.

Andere Tipps

Es ist nichts falsch mit einer statischen Methode anstelle eines Konstruktor haben. In der Tat hat es eine Reihe von Vorteilen .

Ich habe immer mit der statischen Methode. Normalerweise ist es Art einer Hierarchie, die geladen wird, und daher wird nur das Wurzelobjekt benötigt die Methode. Und es ist nicht wirklich ein ungewöhnlicher Ansatz in dem .NET-Framework (z Graphics.FromImage), so sollte es mit Benutzern Ihrer Klasse in Ordnung sein.

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