Kopieren eines Objekts in C#
-
Kopieren eines Objekts mit der Methode
MemberWiseClone()
inC#
-
Kopieren eines Objekts mit der parametrisierten Konstruktormethode 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.
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