Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Kann eine Klasse ihre eigene Instanz überschreiben?
Palladin007
myCSharp.de - Experte

Avatar #avatar-4140.png


Dabei seit:
Beiträge: 1.909
Herkunft: Düsseldorf

Themenstarter:

Kann eine Klasse ihre eigene Instanz überschreiben?

beantworten | zitieren | melden

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ß
private Nachricht | Beiträge des Benutzers
chavez
myCSharp.de - Member



Dabei seit:
Beiträge: 252
Herkunft: Österreich

beantworten | zitieren | melden

Das gibts schon fertig im FW und nennt sich Serialisierung. Da kannst du eine der Arten nehmen zb Binär oder eben auch Xml.
private Nachricht | Beiträge des Benutzers
Palladin007
myCSharp.de - Experte

Avatar #avatar-4140.png


Dabei seit:
Beiträge: 1.909
Herkunft: Düsseldorf

Themenstarter:

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers