Heim >Backend-Entwicklung >C++ >Wie kann ich eine echte Kopie eines Objekts in C# erstellen?
Kopieren von Objekten in C#: eingehende Analyse
Der folgende Codeausschnitt zeigt ein Szenario, in dem zwei Objektreferenzen objectA
und objectB
auf dieselbe Instanz der Klasse MyClass
verweisen. Dies ist ein häufiges Verhalten bei Referenztypen in C#, da sie nur auf einen Speicherort verweisen und nicht die Daten selbst enthalten. In einigen Fällen ist es jedoch erforderlich, völlig unabhängige Kopien des Objekts zu erstellen, die auf unterschiedliche Speicheradressen verweisen.
Verwenden Sie ICloneable für flache Kopien
Um ein flaches Kopieren zu implementieren (nur das Kopieren des Status von Nicht-Referenztyp-Mitgliedern des Originalobjekts), stellt C# die ICloneable
-Schnittstelle bereit. Durch die Implementierung dieser Schnittstelle kann eine Klasse ein benutzerdefiniertes Klonverhalten definieren.
<code class="language-csharp">class myClass : ICloneable { public String test; public object Clone() { return this.MemberwiseClone(); } }</code>Die
MemberwiseClone
-Methode führt eine flache Kopie des Objekts durch und kopiert die Werte aller Nicht-Referenztyp-Mitglieder. Wir erstellen einen benutzerdefinierten Klonmechanismus für die ICloneable
-Klasse, indem wir MemberwiseClone
implementieren und ihre Clone
-Methode mit MyClass
überschreiben.
Unabhängige Objekte erstellen
Um eine eigenständige Instanz von MyClass
zu erstellen, verwenden Sie die Clone
-Methode:
<code class="language-csharp">myClass a = new myClass(); myClass b = (myClass)a.Clone();</code>
Dadurch verweist objectB
auf eine neue Instanz von MyClass
, die eine andere Speicheradresse als objectA
hat. Es ist jedoch wichtig zu beachten, dass es sich um eine flache Kopie handelt, was bedeutet, dass alle Referenztypmitglieder innerhalb des Objekts immer noch auf denselben Speicherort wie das Originalobjekt verweisen. Um eine tiefe Kopie zu implementieren, ist normalerweise ein weiteres Kopieren von Referenztypmitgliedern erforderlich.
Das obige ist der detaillierte Inhalt vonWie kann ich eine echte Kopie eines Objekts in C# erstellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!