也許會有人這樣解釋C# 中淺拷貝與深拷貝區別
淺拷貝是對引用類型拷貝地址
不能說它完全錯誤
其實
首先
int
代碼如下
//枚舉
public enum myEnum
{ _
//結構體
public struct myStruct
{
public int _int;
public myStruct(int i)
{ _int = i; }
}
//類
class myClass
{
public string _string;
public myClass(string s)
{ _string = s; }
}
//ICloneable
class DemoClass : ICloneable
{
public int _int =
public string _string =
public myEnum _enum = myEnum
public myStruct _struct = new myStruct(
public myClass _class = new myClass(
//數組
public int[] arrInt = new int[] {
public string[] arrString = new string[] {
//返回此實例副本的新對象
public object Clone()
{
//MemberwiseClone
return this
}
}
注意
ICloneable 接口
MemberwiseClone 方法
接下來
然後
代碼如下
class 淺拷貝與深拷貝
{
static void Main(string[] args)
{
DemoClass A = new DemoClass();
//創建實例A的副本
DemoClass B = (DemoClass)A
B
Console
B
Console
B
Console
B
Console
A
B
Console
A
B
Console
A
B
Console
A
Console
}
}
結果如下
從最後的輸出結果
對於內部的Class 對象和數組
而對於其它內置的int / string / enum / struct / object 類型
有一位網友說
這說明他對string 類型還不夠了解
可以肯定的是
如果你看一下string 類型的源代碼就知道了
//表示空字符串
public static readonly string Empty;
答案就在於 string 是 readonly 的
下面引用一段網友的代碼
public class Student
{
// 這裡用
public string Name;
public int Age;
//自定義類 Classroom
public Classroom Class;
}
淺拷貝
深拷貝
其實俗點講
public object Clone()
{
Student B = new Student();
B
B
//淺拷貝
B
//深拷貝
B
B
B
//根據情況
}
淺拷貝
淺拷貝的定義 —— 只對值類型(或string)類型分配新的內存地址
深拷貝
深拷貝的定義 —— 對值類型分配新的內存地址
我是這麼定義的
注意
因為通過該接口無法判斷究竟是淺拷貝還是深拷貝
個人愚見
Clone
淺拷貝
From:http://tw.wingwit.com/Article/program/net/201311/13157.html