


Analysis and examples of the difference between c# deep copy and shallow copy
Deep copy means that the source object and the copied object are independent of each other, and changes to any one of them will not affect the other object. For example, a person named Zhang San is later used to clone (assuming the law allows) another person named Li Si. Whether Zhang San is missing arms and legs or Li Si is missing arms and legs, it will not affect the other person. . The more typical ones are Value objects, such as predefined types Int32, Double, structures (struct), enumerations (Enum), etc.
Shallow copy means that the source object and the copy object share an entity, only the referenced variables are different (different names). Changes to any one object will affect the other object. For example, a person was named Zhang San at first, but later changed his name to Li Si, but it is still the same person. Whether Zhang San is missing arms and legs or Li Si is missing arms and legs, this person is unlucky.
There are two types of variables in C#, one is a value type variable and the other is a reference type variable. For the former, copy is a full copy; while for the latter, the general copy is only a shallow copy, which is equivalent to passing only a reference pointer. Therefore, it is also the most troublesome to make a real copy of the latter. Specifically, the Clone method provided in the ICloneable interface must be implemented for it.
Look at the definition:
Shallow copy (shadow clone): only copies the basic type of the object, the object type still belongs to the original reference.
Deep copy (deep clone): does not copy the object The basic class of the object also copies the object in the original object. That is to say, the new object is completely generated.
The difference between shallow copy and deep copy
Shallow copy refers to copying the numerical type fields in the object Copy to a new object, and the reference field in the object means copying one of its references to the target object. If the value of a reference field in the target object is changed, it will be reflected in the original object, which means that the corresponding fields in the original object will also change. The difference between deep copy and shallow copy is the processing of references. Deep copy will create a new field in the new object that is the same as the corresponding field in the original object (the same content), that is to say, this reference is the same as the original object. References are different. When we change this field in the new object, it will not affect the content of the corresponding field in the original object. Therefore, there are two different processing methods for the prototype mode: shallow copy and deep copy of the object.
The difference between shallow copy and deep copy can be clearly seen through the example below. The code is as follows:
using System; using System.Collections.Generic; using System.Text; namespace WindowsApplication1 { class Program { public class Sex { private string _PSex; public string PSex { set { _PSex = value; } get { return _PSex; } } } public class Person : ICloneable { private Sex _pSex = new Sex(); public int aa = 1213; public string pSex { set { _pSex.PSex = value; } get { return _pSex.PSex; } } private string _PName; public string PName { set { this._PName = value; } get { return this._PName; } } public void ShowPersonInfo() { Console.WriteLine("-------------------------"); Console.WriteLine("Name:{0} Sex:{1}", _PName, this.pSex); Console.WriteLine("-------------------------"); Console.WriteLine(this.aa); } //浅拷贝 public object Clone() { return this.MemberwiseClone(); } //深拷贝 public object DeepClone() { Person newP = new Person(); newP.PName = this._PName; newP.pSex = this.pSex; return newP; } } static void Main(string[] args) { Console.WriteLine("原对象:"); Person p = new Person(); p.PName = "JackLee"; p.pSex = "男"; p.ShowPersonInfo(); //浅拷贝 Person copy = (Person)p.Clone(); //深拷贝 Person dcopy = (Person)p.DeepClone(); Console.WriteLine("修改后的原对象:"); p.PName = "JackZhao"; p.pSex = "女"; p.aa = 1111; p.ShowPersonInfo(); Console.WriteLine("修改后的浅拷贝对象:"); copy.ShowPersonInfo(); Console.WriteLine("修改后的深拷贝对象:"); dcopy.ShowPersonInfo(); Console.WriteLine("直接拷贝对象:"); Person PP = p; PP.ShowPersonInfo(); Console.ReadLine(); } } }
Okay, that’s it for the deep copy and shallow copy. The project is not finished yet. Hurry up first. The code can be copied directly into the project and run.
For more c# analysis and examples of the difference between deep copy and shallow copy, please pay attention to the PHP Chinese website!

The combination of C# and .NET provides developers with a powerful programming environment. 1) C# supports polymorphism and asynchronous programming, 2) .NET provides cross-platform capabilities and concurrent processing mechanisms, which makes them widely used in desktop, web and mobile application development.

.NETFramework is a software framework, and C# is a programming language. 1..NETFramework provides libraries and services, supporting desktop, web and mobile application development. 2.C# is designed for .NETFramework and supports modern programming functions. 3..NETFramework manages code execution through CLR, and the C# code is compiled into IL and runs by CLR. 4. Use .NETFramework to quickly develop applications, and C# provides advanced functions such as LINQ. 5. Common errors include type conversion and asynchronous programming deadlocks. VisualStudio tools are required for debugging.

C# is a modern, object-oriented programming language developed by Microsoft, and .NET is a development framework provided by Microsoft. C# combines the performance of C and the simplicity of Java, and is suitable for building various applications. The .NET framework supports multiple languages, provides garbage collection mechanisms, and simplifies memory management.

C# and .NET runtime work closely together to empower developers to efficient, powerful and cross-platform development capabilities. 1) C# is a type-safe and object-oriented programming language designed to integrate seamlessly with the .NET framework. 2) The .NET runtime manages the execution of C# code, provides garbage collection, type safety and other services, and ensures efficient and cross-platform operation.

To start C#.NET development, you need to: 1. Understand the basic knowledge of C# and the core concepts of the .NET framework; 2. Master the basic concepts of variables, data types, control structures, functions and classes; 3. Learn advanced features of C#, such as LINQ and asynchronous programming; 4. Be familiar with debugging techniques and performance optimization methods for common errors. With these steps, you can gradually penetrate the world of C#.NET and write efficient applications.

The relationship between C# and .NET is inseparable, but they are not the same thing. C# is a programming language, while .NET is a development platform. C# is used to write code, compile into .NET's intermediate language (IL), and executed by the .NET runtime (CLR).

C#.NET is still important because it provides powerful tools and libraries that support multiple application development. 1) C# combines .NET framework to make development efficient and convenient. 2) C#'s type safety and garbage collection mechanism enhance its advantages. 3) .NET provides a cross-platform running environment and rich APIs, improving development flexibility.

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


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

ZendStudio 13.5.1 Mac
Powerful PHP integrated development environment

mPDF
mPDF is a PHP library that can generate PDF files from UTF-8 encoded HTML. The original author, Ian Back, wrote mPDF to output PDF files "on the fly" from his website and handle different languages. It is slower than original scripts like HTML2FPDF and produces larger files when using Unicode fonts, but supports CSS styles etc. and has a lot of enhancements. Supports almost all languages, including RTL (Arabic and Hebrew) and CJK (Chinese, Japanese and Korean). Supports nested block-level elements (such as P, DIV),

SublimeText3 Mac version
God-level code editing software (SublimeText3)

PhpStorm Mac version
The latest (2018.2.1) professional PHP integrated development tool

Dreamweaver CS6
Visual web development tools