Kopieren eines Objekts in C#

Muhammad Maisam Abbas 16 Februar 2024
  1. Kopieren eines Objekts mit der Methode MemberWiseClone() in C#
  2. Kopieren eines Objekts mit der parametrisierten Konstruktormethode in C#
Kopieren eines Objekts in C#

In diesem Tutorial werden Methoden zum Kopieren eines Objekts in C# vorgestellt.

Kopieren eines Objekts mit der Methode MemberWiseClone() in C#

Leider gibt es keine integrierte Möglichkeit, eine separate Kopie eines Objekts in C# zu erstellen. Dieses Phänomen wird im folgenden Codebeispiel demonstriert.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace copy_an_object {
  class myClass {
    public String test;
  }
  class Program {
    static void Main(string[] args) {
      myClass a = new myClass();
      a.test = "This is a test";
      myClass b = a;
      b.test = "This is not a test";
      Console.WriteLine(a.test);
      Console.WriteLine(b.test);
    }
  }
}

Ausgabe:

This is not a test
This is not a test

Wir erhalten beide Male dieselbe Ausgabe, da eine Instanz einer Klasse in C# eine Referenzvariable ist, die auf einen bestimmten Speicherort verweist. Aufgrund der objektorientierten Natur von C# zeigt der neue Zeiger b auch auf den Speicherort von a.

Wenn wir einen separaten Speicherort für b erstellen möchten, müssen wir uns auf einige benutzerdefinierte Ansätze verlassen. Mit der Methode MemberWiseClone() wird eine separate Kopie der Werte des aufrufenden Objekts in C# erstellt. Der Rückgabetyp der Funktion MemberWiseClone() ist object. Das folgende Codebeispiel zeigt, wie Sie mit der Funktion MemberWiseClone() in C# eine separate Kopie eines Klassenobjekts erstellen.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace copy_an_object {
  class myClass {
    public String test;
    public object Clone() {
      return this.MemberwiseClone();
    }
  }
  class Program {
    static void Main(string[] args) {
      myClass a = new myClass();
      a.test = "This is a test";
      myClass b = (myClass)a.Clone();
      b.test = "This is not a test";
      Console.WriteLine(a.test);
      Console.WriteLine(b.test);
    }
  }
}

Ausgabe:

This is a test
This is not a test

Diesmal geht aus der Ausgabe hervor, dass es für jedes Klassenobjekt eine separate Kopie gibt. Wir haben die Funktion MemberWiseClone() in die Funktion Clone() der Klasse myClass implementiert. Die Funktion Clone() gibt eine separate Kopie des Klassenobjekts zurück. Der Rückgabewert der Funktion Clone() wird in myClass umgewandelt und vom Klassenobjekt b angezeigt.

Kopieren eines Objekts mit der parametrisierten Konstruktormethode in C#

Wir können einen parametrisierten Klassenkonstruktor erstellen, um dasselbe Ziel in C# zu erreichen. Wir können das vorherige Klassenobjekt an den Konstruktor eines neuen Klassenobjekts übergeben und alle Werte daraus kopieren. Das folgende Codebeispiel zeigt uns, wie wir mit der parametrisierten Konstruktormethode in C# eine separate Kopie eines Klassenobjekts erstellen können

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace copy_an_object {
  class MyClass {
    public String test;

    public MyClass() {}

    public MyClass(MyClass other) {
      test = other.test;
    }
  }
  class Program {
    static void Main(string[] args) {
      MyClass a = new myClass();
      a.test = "This is a test";
      MyClass b = new MyClass(a);
      b.test = "This is not a test";
      Console.WriteLine(a.test);
      Console.WriteLine(b.test);
    }
  }
}

Ausgabe:

This is a test
This is not a test

Wir haben einen parametrisierten Konstruktor für die Klasse MyClass erstellt, der ein Objekt der Klasse MyClass nimmt und die Zeichenkette test daraus kopiert. In der main funktion haben wir das Objekt a der Klasse MyClass erstellt und an den Konstruktor von b übergeben.

Muhammad Maisam Abbas avatar Muhammad Maisam Abbas avatar

Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.

LinkedIn

Verwandter Artikel - Csharp Class