Laden...

Kann eine Klasse ihre eigene Instanz überschreiben?

Erstellt von Palladin007 vor 11 Jahren Letzter Beitrag vor 11 Jahren 1.249 Views
Thema geschlossen
Palladin007 Themenstarter:in
2.080 Beiträge seit 2012
vor 11 Jahren
Kann eine Klasse ihre eigene Instanz überschreiben?

Guten Morgen

Ich habe überlegt, wie eine Instanz einer Klasse sich selber überschreiben kann.
Dass man z.B. eine Methode baut, der eine neue Instanz übergeben wird und die wird dann gespeichert.

Oder wenn man die Attribute einer Klasse in z.B. einer XML-Datei speichert.
Man speichert sie ab und wenn man daraus wieder die Daten liest, erhält man wieder ein Objekt vom Datentyp der Klasse.

Aber muss ich nun jeden Wert einzeln in die Eigenschaft der Klasse schreiben, oder gibt es eine kürzere Lösung?

Wenn ich versuche, "this" zu ändern, bekomme ich ja eine Fehlermeldung.
Kann man die irgendwie umgehen?

Gruß

NuGet Packages im Code auslesen
lock Alternative für async/await

Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.

C
252 Beiträge seit 2007
vor 11 Jahren

Das gibts schon fertig im FW und nennt sich Serialisierung. Da kannst du eine der Arten nehmen zb Binär oder eben auch Xml.

Palladin007 Themenstarter:in
2.080 Beiträge seit 2012
vor 11 Jahren

Ist es denn möglich, die aktuelle Instanz zu überschreiben?

Wie mit der Methode, die ich als Beispiel genommen habe.

Das mit xml war jetzt nur ein Beispiel zum Verständnis

NuGet Packages im Code auslesen
lock Alternative für async/await

Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.

49.485 Beiträge seit 2005
vor 11 Jahren

Hallo Palladin007,

was bei einer Zuweisung passiert, gehört zu den Grundlagen, die wir als bekannt voraussetzen.

Bei Werttypen wird der Zustand/Inhalt von einer Struktur in die andere Struktur übertragen. Bei Referenztypen enthalten alle Variablen nur Referenzen, entsprechend wird bei einer Zuweisung nur die Referenz der Instanz übertragen.

Offensichtlich reden wir über Referenztypen. Selbst wenn du an this zuweisen könntest (was nicht geht, wie du selbst gemerkt hast), würde nur eine Referenz übertragen werden, und nicht wie du es offensichtlich willst, der Zustand der einen Instanz an die andere Instanz.

Trenne also immer klar zwischen einer Instanz und deren Zustand. Instanzen können überhaupt nicht überschrieben werden. Man kann nur deren Zustand überschreiben.

Es ist zwar in gewissem Sinne blöd, dass man bei der (binären /Xml-)Deserialisierung des .NET-Frameworks eine neue Instanz bekommt, aber das ist leider so.

Natürlich kann man eine Methode schreiben, die den Zustand einer Instanz sichert und eine zweite, die diesen Zustand später in derselben Instanz wiederherstellt, eben dadurch, dass man die einzelnen Felder/Eigenschaften der Instanz extern speichert (siehe auch Memento-Pattern) und später wieder einzeln in die Instanz überträgt. Um das nicht individuell für jede Klasse und deren Eigenschaften programmieren zu müssen, kann man Reflection benutzen (z.B. Type.GetProperties).

Für die Frage, ob man besser die Felder oder besser die Eigenschaften sichert, siehe Untersch. Behandlung der Objektdaten bzgl. Modifizierer bei Serialisierung in den versch. Formaten.

herbivore

Thema geschlossen