Heim >Backend-Entwicklung >C++ >Wie erstelle ich eine tiefe oder flache Kopie eines Objekts in C#?
Objektklonen in C#
Der folgende Code veranschaulicht den Unterschied im Verhalten von Referenztypen (Klassen) und Werttypen (Strukturen) in C#. Konkret geht es um die Frage: Wie erstellt man in C# eine Kopie eines Objekts, die auf einen anderen Bereich im Speicher verweist?
Klassen in C# sind Referenztypen. Das heißt, wenn Sie ein Klassenobjekt einem anderen Objekt zuweisen, weisen Sie tatsächlich eine Referenz auf dasselbe zugrunde liegende Objekt zu. Daher wirken sich alle an einem der Objekte vorgenommenen Änderungen auf beide Instanzen aus. Wenn Sie im bereitgestellten Code ObjektA ObjektB zuweisen, erstellen Sie einen Alias von ObjektA und nicht eine separate Instanz.
Um eine echte Kopie eines Objekts zu erstellen, müssen Sie die ICloneable
-Schnittstelle in Ihrer Klasse implementieren. Diese Schnittstelle stellt die Methode Clone()
bereit, die eine neue Instanz des Objekts erstellt. Durch Überschreiben der Clone()
-Methode können Sie den Klonvorgang steuern und definieren, welche Felder und Eigenschaften kopiert werden sollen.
Im bereitgestellten Code zeigt der folgende Codeausschnitt, wie das Klonen implementiert wird:
<code class="language-csharp">class myClass : ICloneable { public String test; public object Clone() { return this.MemberwiseClone(); } }</code>
Sobald eine Klasse ICloneable
implementiert, können Sie mit dem folgenden Code eine echte Kopie erstellen:
<code class="language-csharp">myClass a = new myClass(); myClass b = (myClass)a.Clone();</code>
Es ist zu beachten, dass MemberwiseClone()
eine flache Kopie erstellt, die die Werte aller Felder und Eigenschaften kopiert, jedoch keine verschachtelten Objekte kopiert. Wenn Sie eine tiefe Kopie erstellen müssen, müssen Sie einen benutzerdefinierten Klonprozess implementieren, der verschachtelte Objekte berücksichtigt.
Das obige ist der detaillierte Inhalt vonWie erstelle ich eine tiefe oder flache Kopie eines Objekts in C#?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!