suchen
HeimBackend-EntwicklungC#.Net-TutorialAusführliche Erklärung zur Implementierung von Copy und Deep Copy in C#

Der unten stehende Herausgeber bringt Ihnen einen Artikel über die Implementierung von C#-Kopieren und Deep Copying. Der Herausgeber findet es ziemlich gut, deshalb teile ich es jetzt mit Ihnen und gebe es als Referenz. Folgen wir dem Editor, um einen Blick darauf zu werfen.

Der Unterschied zwischen Deep Copy und Shallow Copy besteht darin, dass Shallow Copy nur den Wert des Werttyps kopiert, während das in der Instanz enthaltene Objekt weiterhin vorhanden ist verweist auf das Original. Es gibt Beispiele.

 class Program
  {
    [Serializable]
    public class Car 
    {
      public string name;
      public Car(string name)
      {
        this.name = name;
      }
    }
    [Serializable]
    public class Person:ICloneable
    {
      public int id;
      public string name;
      public Car car;
      public Person()
      {
      }
      public Person(int id, string name, Car car)
      {
        this.id = id;
        this.name = name;
        this.car = car;
      }

      public Object Clone() //实现ICloneable接口,达到浅表复制。浅表复制与深度复制无直接有关系。 对外提供一个创建自身的浅表副本的能力
      {
        return this.MemberwiseClone();
      }

    }

    //要复制的实例必须可序列化,包括实例引用的其它实例都必须在类定义时加[Serializable]特性。
    public static T Copy<T>(T RealObject)
    {
      using (Stream objectStream = new MemoryStream())
      {
        //利用 System.Runtime.Serialization序列化与反序列化完成引用对象的复制  
        IFormatter formatter = new BinaryFormatter();
        formatter.Serialize(objectStream, RealObject);
        objectStream.Seek(0, SeekOrigin.Begin);
        return (T)formatter.Deserialize(objectStream);
      }
    }  

   
    static void Main(string[] args)
    {
      Person p1 = new Person(1, "Scott", new Car("宝马"));
      Console.WriteLine("原始值:P1:id={0}----------->name={1}------>car={2}", p1.id, p1.name, p1.car.name);
      Person p2 = Copy<Person>(p1); //克隆一个对象
      Person p3 = p1.Clone() as Person;//浅表复制
      Console.WriteLine("改变P1的值");
      p1.id = 2;
      p1.name = "Lacy";
      p1.car.name = "红旗";
      Console.WriteLine("P1:id={0}----------->name={1}------>car={2}", p1.id, p1.name, p1.car.name);
      Console.WriteLine("深度复制:P2:id={0}----------->name={1}------>car={2}", p2.id, p2.name, p2.car.name);
      Console.WriteLine("浅表复制:P3:id={0}----------->name={1}------>car={2}", p3.id, p3.name, p3.car.name);
      Console.ReadKey();

    }

Betriebsergebnisse:

1. Der Fall, in dem T im List (int-Typ usw.)

Für eine Liste von Werttypen können Sie sie direkt mit der folgenden Methode kopieren:

List<T> oldList = new List<T>(); 
oldList.Add(..); 
List<T> newList = new List<T>(oldList);

2. List-Objekt Das T in ist ein Referenztyp (z. B. eine benutzerdefinierte Entitätsklasse)

1 Listen von Referenztypen können nicht mit der oben genannten Methode kopiert werden Es werden nur Verweise auf Objekte in der Liste kopiert. Sie können zum Kopieren die folgenden Erweiterungsmethoden verwenden:

static class Extensions 
 { 
     public static IList<T> Clone<T>(this IList<T> listToClone) where T: ICloneable 
     { 
         return listToClone.Select(item => (T)item.Clone()).ToList(); 
     } 
 //<SPAN style="COLOR: #000000">当然前题是List中的对象要实现ICloneable接口</SPAN>
 }

2. Eine weitere Methode ist die Serialisierung, um eine tiefe Kopie des Referenzobjekts zu erstellen am zuverlässigsten.

public static T Clone<T>(T RealObject) 

{ 
   using (Stream objectStream = new MemoryStream()) 
   { 
      //利用 System.Runtime.Serialization序列化与反序列化完成引用对象的复制
       IFormatter formatter = new BinaryFormatter(); 
       formatter.Serialize(objectStream, RealObject); 
       objectStream.Seek(0, SeekOrigin.Begin); 
       return (T)formatter.Deserialize(objectStream); 
   } 
}

3. Verwenden Sie System.Xml.Serialization, um Serialisierung und Deserialisierung zu implementieren

public static T Clone<T>(T RealObject) 
{ 
      using(Stream stream=new MemoryStream())
      {
        XmlSerializer serializer = new XmlSerializer(typeof(T));
        serializer.Serialize(stream, RealObject);
        stream.Seek(0, SeekOrigin.Begin);
        return (T)serializer.Deserialize(stream);
      }
}

Das obige ist der detaillierte Inhalt vonAusführliche Erklärung zur Implementierung von Copy und Deep Copy in C#. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme
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
C# und die .NET -Laufzeit: Wie sie zusammenarbeitenC# und die .NET -Laufzeit: Wie sie zusammenarbeitenApr 19, 2025 am 12:04 AM

C# und .NET-Laufzeit arbeiten eng zusammen, um Entwickler effiziente, leistungsstarke und plattformübergreifende Entwicklungsfähigkeiten zu befähigen. 1) C# ist eine vom Typ befindliche und objektorientierte Programmiersprache, die so konzipiert ist, dass sie nahtlos in das .NET-Framework integriert werden. 2) Die .NET-Laufzeit verwaltet die Ausführung von C# Code, bietet Müllsammlung, Type Sicherheit und andere Dienste und sorgt für einen effizienten und plattformübergreifenden Betrieb.

C# .NET -Entwicklung: Ein Anfängerleitfaden zum EinstiegC# .NET -Entwicklung: Ein Anfängerleitfaden zum EinstiegApr 18, 2025 am 12:17 AM

Um die C# .NET -Entwicklung zu starten, müssen Sie: 1. Verstehen Sie das Grundkenntnis von C# und die Kernkonzepte des .NET -Frameworks; 2. Meister Sie die grundlegenden Konzepte von Variablen, Datentypen, Kontrollstrukturen, Funktionen und Klassen; 3.. 4. Mit Debugging -Techniken und Leistungsoptimierungsmethoden für häufige Fehler vertraut sein. Mit diesen Schritten können Sie nach und nach in die Welt von C#.NET eindringen und effiziente Anwendungen schreiben.

C# und .net: Verständnis der Beziehung zwischen den beidenC# und .net: Verständnis der Beziehung zwischen den beidenApr 17, 2025 am 12:07 AM

Die Beziehung zwischen C# und .NET ist untrennbar miteinander verbunden, aber nicht dasselbe. C# ist eine Programmiersprache, während .NET eine Entwicklungsplattform ist. C# wird verwendet, um Code zu schreiben, in .NETs Intermediate Language (IL) zu kompilieren und von der .NET -Laufzeit (CLR) ausgeführt zu werden.

Die anhaltende Relevanz von C# .NET: Ein Blick auf die aktuelle VerwendungDie anhaltende Relevanz von C# .NET: Ein Blick auf die aktuelle VerwendungApr 16, 2025 am 12:07 AM

C#.NET ist immer noch wichtig, da es leistungsstarke Tools und Bibliotheken bietet, die mehrere Anwendungsentwicklung unterstützen. 1) C# kombiniert .NET Framework, um die Entwicklung effizient und bequem zu machen. 2) Mechanismus zum Typensicherheit und Müllsammlung von C#erhöht die Vorteile. 3) .NET bietet eine plattformübergreifende laufende Umgebung und eine reichhaltige APIs, wodurch die Flexibilität der Entwicklung verbessert wird.

Vom Web zum Desktop: Die Vielseitigkeit von C# .NETVom Web zum Desktop: Die Vielseitigkeit von C# .NETApr 15, 2025 am 12:07 AM

C#.NETisversatileforbothwebanddesktopdevelopment.1)Forweb,useASP.NETfordynamicapplications.2)Fordesktop,employWindowsFormsorWPFforrichinterfaces.3)UseXamarinforcross-platformdevelopment,enablingcodesharingacrossWindows,macOS,Linux,andmobiledevices.

C# .net und die Zukunft: Anpassung an neue TechnologienC# .net und die Zukunft: Anpassung an neue TechnologienApr 14, 2025 am 12:06 AM

C# und .NET passen sich durch kontinuierliche Aktualisierungen und Optimierungen an die Bedürfnisse neuer Technologien an. 1) C# 9.0 und .NET5 Führen Sie den Datensatztyp und die Leistungsoptimierung ein. 2) .NETCORE verbessert die native und containerische Unterstützung von Cloud. 3) ASP.NetCore integriert sich in moderne Webtechnologien. 4) ML.NET unterstützt maschinelles Lernen und künstliche Intelligenz. 5) Asynchrone Programmierung und Best Practices verbessern die Leistung.

Ist C# .NET das Richtige für Sie? Bewertung seiner AnwendbarkeitIst C# .NET das Richtige für Sie? Bewertung seiner AnwendbarkeitApr 13, 2025 am 12:03 AM

C#.NetissoBableFoREenterPrise-Level Applications-WithemicrosoftCosystemDuetoitsStrongtyPing, Richlibrary, Androbustperformance.

C# Code in .NET: Erforschen des ProgrammiervorgangsC# Code in .NET: Erforschen des ProgrammiervorgangsApr 12, 2025 am 12:02 AM

Der Programmierungsprozess von C# in .NET enthält die folgenden Schritte: 1) Schreiben von C# Code, 2) Kompilieren in eine mittlere Sprache (IL) und 3), die durch die .NET -Laufzeit (CLR) ausführt. Die Vorteile von C# in .NET sind die moderne Syntax, das leistungsstarke Typsystem und die enge Integration in das .NET -Framework, das für verschiedene Entwicklungsszenarien geeignet ist, von Desktop -Anwendungen bis hin zu Webdiensten.

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SecLists

SecLists

SecLists ist der ultimative Begleiter für Sicherheitstester. Dabei handelt es sich um eine Sammlung verschiedener Arten von Listen, die häufig bei Sicherheitsbewertungen verwendet werden, an einem Ort. SecLists trägt dazu bei, Sicherheitstests effizienter und produktiver zu gestalten, indem es bequem alle Listen bereitstellt, die ein Sicherheitstester benötigen könnte. Zu den Listentypen gehören Benutzernamen, Passwörter, URLs, Fuzzing-Payloads, Muster für vertrauliche Daten, Web-Shells und mehr. Der Tester kann dieses Repository einfach auf einen neuen Testcomputer übertragen und hat dann Zugriff auf alle Arten von Listen, die er benötigt.

PHPStorm Mac-Version

PHPStorm Mac-Version

Das neueste (2018.2.1) professionelle, integrierte PHP-Entwicklungstool

Herunterladen der Mac-Version des Atom-Editors

Herunterladen der Mac-Version des Atom-Editors

Der beliebteste Open-Source-Editor

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Leistungsstarke integrierte PHP-Entwicklungsumgebung