[bearbeiten] bezüglich Ihrer Klarstellung: Wie ich verstehe, haben Sie N Objekte, jedes hat einen (direkten) Verweis auf das Vorlagenobjekt. Sie möchten in die Vorlage zurückschreiben, damit alle Objekte diese Änderungen "sehen".
Vorschlag: einen Template-Broker einbinden.
Anstatt die Vorlage zu übergeben, übergeben Sie den Vorlagenanbieter an die Objekte.
um die Syntax in den Komponenten zu vereinfachen, können Sie eine (private/interne?) Eigenschaft
MyData Template { get { return m_templateProvider.Template; } }
void UpdateTemplate() { m_templateProvider.Template =
(MyData) this.MemberwiseClone(); }
Der Vorlagenanbieter vereinfacht auch das Sperren in Multithread-Szenarien.
Kurz gesagt, auf keinen Fall, wenn Sie es nicht selbst tun. Aber warum nicht ein neues Objekt erstellen, wenn Sie trotzdem alle Eigenschaften überschreiben?
memcopy
und ähnliche Low-Level-Konstrukte werden nicht unterstützt, da sie die Garantien der Umgebung untergraben.
Eine flache Kopie für Strukturen wird durch Zuweisung erstellt. Für Klassen ist MemberwiseClone
die Methode, um das zu tun - aber wie Sie sagen, dass ein neues Objekt erstellt.
Es gibt keine integrierte Möglichkeit dafür, und da es möglicherweise die Kapselung bricht, sollte es trotzdem vorsichtig verwendet werden.
Sie könnten eine generische Routine mit Reflektion erstellen, aber ob es funktioniert oder nicht, hängt von der Klasse selbst ab. Und ja, ti wird im Vergleich langsam sein.
Was bleibt, ist die Unterstützung durch eine benutzerdefinierte Schnittstelle. Sie können eine generische "Shallow Copy" -Routine bereitstellen, die nach der Schnittstelle sucht und diese verwendet und auf die Reflexion zurückgreift, wenn dies nicht der Fall ist. Dadurch wird die Funktionalität allgemein verfügbar und Sie können die Klassen optimieren, für die die Leistung später von Bedeutung ist.
Er will, wissen, wie man den Inhalt eines Objekts A kopieren * in * ein vorhandenes Objekt B und überschreibt alle Inhalte. MemberwiseClone erstellt ein * neues * Objekt. –