首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 基礎:淺拷貝與深拷貝的核心差異與 MemberwiseClone 實作

     編輯:關於C語言

引言

C# 變數分為值類型與引用類型。對於值類型,賦值(=)即完成深/淺拷貝,效果一致。本文聚焦引用類型的拷貝機制。

兩種複製模式

  • 淺拷貝:僅複製值類型欄位;引用類型欄位僅複製參考,新舊物件共用同一個引用類型實例。
  • 深拷貝:不僅複製值類型欄位,也遞迴建立引用類型欄位的新實例,達成完全獨立。

特殊說明:string 雖為引用類型,但因不可變特性,淺拷貝時視同值類型處理。

淺拷貝實作:MemberwiseClone

Object.MemberwiseClone() 建立淺層副本:非靜態欄位逐位複製,值類型複製數值,引用類型複製參考。

程式碼範例

public class Person
{
    public int Age { get; set; }
    public string Address { get; set; }
    public Name Name { get; set; }

    public object Clone()
    {
        return this.MemberwiseClone(); // 僅淺拷貝
    }
}

public class Name
{
    public Name(string frisName, string lastName)
    {
        FristName = frisName;
        LastName = lastName;
    }
    public string FristName { get; set; }
    public string LastName { get; set; }
}

呼叫 Clone() 後,Person.Name 仍指向同一 Name 實例,修改將互相影響。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved