Heim > Backend-Entwicklung > C++ > Wie kann ich eine tiefe Kopie eines benutzerdefinierten Objekts in C# erstellen?

Wie kann ich eine tiefe Kopie eines benutzerdefinierten Objekts in C# erstellen?

Linda Hamilton
Freigeben: 2025-01-13 12:22:43
Original
112 Leute haben es durchsucht

How Can I Create a Deep Copy of a Custom Object in C#?

Tiefenkopieren benutzerdefinierter Objekte in C#

In diesem Artikel geht es um das Klonen von Objekten in C#, wobei der Schwerpunkt auf der Unterscheidung zwischen Referenz- und Werttypen liegt und wie man wirklich tiefe Kopien benutzerdefinierter Objekte erstellt. Wir verwenden Beispiele, um das Verhalten von MyClass (einem Referenztyp) und myStruct (einem Werttyp) bei der Zuweisung zu veranschaulichen. Wie erwartet werden Änderungen an einer Referenztypinstanz in anderen Referenzen widergespiegelt, da sie denselben Speicherort verwenden. Werttypen erstellen jedoch unabhängige Kopien.

Um eine echte Kopie eines benutzerdefinierten Objekts zu erstellen, implementieren wir die ICloneable-Schnittstelle. Dies erfordert die Definition einer Clone-Methode, die eine neue Instanz mit identischen Eigenschaftswerten generiert.

Implementierung ICloneable für Deep Copying

Der folgende Code demonstriert die Implementierung von ICloneable für eine tiefe Kopie, die verschachtelte Objekte verarbeitet:

<code class="language-csharp">class MyClass : ICloneable
{
    public string test;
    public object Clone()
    {
        MyClass newObj = (MyClass)this.MemberwiseClone(); // Shallow copy first

        // Handle nested objects for a deep copy (example)
        // if (this.nestedObject != null)
        // {
        //    newObj.nestedObject = (NestedObjectType)this.nestedObject.Clone();
        // }
        return newObj;
    }
}</code>
Nach dem Login kopieren

MemberwiseClone() erstellt eine flache Kopie. Um eine tiefe Kopie zu erreichen, müssen Sie alle verschachtelten Objekte innerhalb der Clone-Methode explizit klonen, wie im kommentierten Beispiel gezeigt. Dies erfordert rekursives Klonen, wenn verschachtelte Objekte auch verschachtelte Objekte enthalten.

Erstellen einer tiefen Kopie mit der Clone-Methode:

<code class="language-csharp">MyClass a = new MyClass();
MyClass b = (MyClass)a.Clone();</code>
Nach dem Login kopieren

Dadurch wird sichergestellt, dass b eine völlig unabhängige Kopie von a ist, auch wenn a komplexe verschachtelte Strukturen enthält. Denken Sie daran, den Abschnitt zum Klonen verschachtelter Objekte an Ihre spezifische Klassenstruktur anzupassen.

Das obige ist der detaillierte Inhalt vonWie kann ich eine tiefe Kopie eines benutzerdefinierten Objekts in C# erstellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage