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

C# 設計模式:原型模式淺拷貝與深拷貝完整對比 (3/3)

     編輯:關於C語言

客戶端測試程式碼

以下程式碼展示如何使用原型模式進行淺拷貝與深拷貝,並驗證兩者在修改原始物件時的行為差異:

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

using Pattern.Prototype;

public partial class Prototype : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Response.Write("ShallowCopy演示如下:<br />");
        ShowShallowCopy();

        Response.Write("DeepCopy演示如下:<br />");
        ShowDeepCopy();
    }

    private void ShowShallowCopy()
    {
        ShallowCopy sc = new ShallowCopy();
        sc.MessageModel = new MessageModel("ShallowCopy", DateTime.Now);

        ShallowCopy sc2 = (ShallowCopy)sc.Clone();

        Response.Write(sc.MessageModel.Message);
        Response.Write("<br />");
        Response.Write(sc2.MessageModel.Message);
        Response.Write("<br />");

        sc.MessageModel.Message = "ShallowCopyShallowCopy";

        Response.Write(sc.MessageModel.Message);
        Response.Write("<br />");
        Response.Write(sc2.MessageModel.Message);
        Response.Write("<br />");
    }

    private void ShowDeepCopy()
    {
        DeepCopy sc = new DeepCopy();
        sc.MessageModel = new MessageModel("DeepCopy", DateTime.Now);

        DeepCopy sc2 = (DeepCopy)sc.Clone();

        Response.Write(sc.MessageModel.Message);
        Response.Write("<br />");
        Response.Write(sc2.MessageModel.Message);
        Response.Write("<br />");

        sc.MessageModel.Message = "DeepCopyDeepCopy";

        Response.Write(sc.MessageModel.Message);
        Response.Write("<br />");
        Response.Write(sc2.MessageModel.Message);
        Response.Write("<br />");
    }
}

執行結果對比

淺拷貝結果

ShallowCopy
ShallowCopy
ShallowCopyShallowCopy
ShallowCopyShallowCopy

分析:修改原始物件的 MessageModel.Message 後,拷貝物件的對應屬性也跟著改變,因為兩者共用同一個 MessageModel 參考。

深拷貝結果

DeepCopy
DeepCopy
DeepCopyDeepCopy
DeepCopy

分析:修改原始物件的 MessageModel.Message 後,拷貝物件保持原值,因為深拷貝在 Clone() 中建立了新的 MessageModel 實例。

核心差異總結

特性淺拷貝 (MemberwiseClone)深拷貝 (new 實例)
值類型欄位複製數值複製數值
參考類型欄位複製參考(共用物件)建立新物件並複製內容
修改原物件影響影響拷貝物件不影響拷貝物件
效能較快較慢(需遞歸複製)
適用場景物件圖簡單、無巢狀參考物件圖複雜、需完全獨立副本

參考資源

DoFactory 原型模式

原型模式類別圖
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved