Object.MemberwiseClone-Methode
Erstellt eine flache Kopie des aktuellen Object.
Namespace: System
Assembly: mscorlib (in mscorlib.dll)
Syntax
'Declaration
Protected Function MemberwiseClone As Object
'Usage
Dim returnValue As Object
returnValue = Me.MemberwiseClone
protected Object MemberwiseClone ()
protected:
Object^ MemberwiseClone ()
protected Object MemberwiseClone ()
protected function MemberwiseClone () : Object
Rückgabewert
Eine flache Kopie des aktuellen Object.
Hinweise
Die MemberwiseClone-Methode erstellt eine flache Kopie, indem ein neues Objekt erstellt wird und anschließend die nicht statischen Felder des aktuellen Objekts in das neue Objekt kopiert werden. Wenn ein Feld ein Werttyp ist, wird das Feld bitweise kopiert. Wenn es sich bei dem Feld um einen Verweistyp handelt, wird nicht das Objekt, auf das verwiesen wird, sondern der Verweis kopiert. Daher verweisen das ursprüngliche Objekt und der Klon auf dasselbe Objekt.
Als Beispiel soll ein Objekt X dienen, das auf die Objekte A und B verweist. Objekt B wiederum verweist auf ein Objekt C. Eine flache Kopie von X erstellt das neue Objekt X2, das ebenfalls auf die Objekte A und B verweist. Eine tiefe Kopie von X erstellt ein neues Objekt X2, das auf die neuen Objekte A2 und B2 verweist, die Kopien von A und B sind. B2 wiederum verweist auf das neue Objekt C2, das eine Kopie von C ist. Verwenden Sie eine Klasse, die die ICloneable-Schnittstelle implementiert, um eine tiefe oder flache Kopie eines Objekts zu erstellen.
Beispiel
Das folgende Codebeispiel veranschaulicht das Kopieren einer Instanz einer Klasse mit MemberwiseClone.
Imports System
Class MyBaseClass
Public Shared CompanyName As String = "My Company"
Public age As Integer
Public name As String
End Class 'MyBaseClass
Class MyDerivedClass
Inherits MyBaseClass
Shared Sub Main()
' Creates an instance of MyDerivedClass and assign values to its fields.
Dim m1 As New MyDerivedClass()
m1.age = 42
m1.name = "Sam"
' Performs a shallow copy of m1 and assign it to m2.
Dim m2 As MyDerivedClass = CType(m1.MemberwiseClone(), MyDerivedClass)
End Sub 'Main
End Class 'MyDerivedClass
using System;
class MyBaseClass {
public static string CompanyName = "My Company";
public int age;
public string name;
}
class MyDerivedClass: MyBaseClass {
static void Main() {
// Creates an instance of MyDerivedClass and assign values to its fields.
MyDerivedClass m1 = new MyDerivedClass();
m1.age = 42;
m1.name = "Sam";
// Performs a shallow copy of m1 and assign it to m2.
MyDerivedClass m2 = (MyDerivedClass) m1.MemberwiseClone();
}
}
using namespace System;
ref class MyBaseClass
{
public:
static String^ CompanyName;
int age;
String^ name;
};
ref class MyDerivedClass: public MyBaseClass
{
public:
static void Test()
{
// Creates an instance of MyDerivedClass and assign values to its fields.
MyDerivedClass^ m1 = gcnew MyDerivedClass;
m1->age = 42;
m1->name = "Sam";
// Performs a shallow copy of m1 and assign it to m2.
MyDerivedClass^ m2 = safe_cast<MyDerivedClass^>(m1->MemberwiseClone());
}
};
int main()
{
MyDerivedClass::Test();
}
import System.*;
class MyBaseClass implements ICloneable
{
public static String companyName = "My Company";
public int age;
public String name;
} //MyBaseClass
class MyDerivedClass extends MyBaseClass
{
public static void main(String[] args) throws CloneNotSupportedException
{
// Creates an instance of MyDerivedClass and assign
// values to its fields.
MyDerivedClass m1 = new MyDerivedClass();
m1.age = 42;
m1.name = "Sam";
// Performs a shallow copy of m1 and assign it to m2.
MyDerivedClass m2 = (MyDerivedClass)m1.MemberwiseClone();
} //main
} //MyDerivedClass
import System
class MyBaseClass {
public static var CompanyName : String = "My Company";
public var age : int;
public var name : String;
}
class MyDerivedClass extends MyBaseClass {
static function Main() {
// Creates an instance of MyDerivedClass and assign values to its fields.
var m1 : MyDerivedClass = new MyDerivedClass();
m1.age = 42;
m1.name = "Sam";
// Performs a shallow copy of m1 and assign it to m2.
var m2 : MyDerivedClass = MyDerivedClass(m1.MemberwiseClone());
}
}
Plattformen
Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile für Pocket PC, Windows Mobile für Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.
Versionsinformationen
.NET Framework
Unterstützt in: 2.0, 1.1, 1.0
.NET Compact Framework
Unterstützt in: 2.0, 1.0
Siehe auch
Referenz
Object-Klasse
Object-Member
System-Namespace
ICloneable-Schnittstelle