第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在C#中創(chuàng)建對象的副本

在C#中創(chuàng)建對象的副本

C#
富國滬深 2019-08-19 15:35:16
在C#中創(chuàng)建對象的副本請看下面的代碼(摘自C#書):public class MyClass {     public int val;}public struct myStruct  {     public int val;}public class Program {     private static void Main(string[] args)      {         MyClass objectA = new MyClass();         MyClass objectB = objectA;         objectA.val = 10;         objectB.val = 20;         myStruct structA = new myStruct();         myStruct structB = structA;         structA.val = 30;         structB.val = 40;         Console.WriteLine("objectA.val = {0}", objectA.val);         Console.WriteLine("objectB.val = {0}", objectB.val);         Console.WriteLine("structA.val = {0}", structA.val);         Console.WriteLine("structB.val = {0}", structB.val);         Console.ReadKey();     }}我知道它會產(chǎn)生以下輸出:objectA.val = 20objectB.val = 20structA.val = 30structB.val = 40輸出的最后兩行我沒有問題,但前兩個告訴我objectA并objectB指向相同的內(nèi)存塊(因為在C#中,對象是引用類型)。問題是make如何制作objectB,objectA以便它指向內(nèi)存中的不同區(qū)域。我理解,嘗試分配他們的成員可能不起作用,因為這些成員也可能是參考。那么我該如何制作objectB一個完全不同的實體objectA呢?謝謝
查看完整描述

3 回答

?
牧羊人nacy

TA貢獻1862條經(jīng)驗 獲得超7個贊

沒有內(nèi)置的方式。你可以讓MyClass實現(xiàn)IClonable接口(但它有點不贊成)或只是編寫自己的Copy / Clone方法。在任何一種情況下,您都必須編寫一些代碼。

對于大對象,您可以考慮序列化+反序列化(通過MemoryStream),只是為了重用現(xiàn)有代碼。

無論采用何種方法,都要仔細考慮“副本”的含義。它應(yīng)該有多深,是否有被禁止的Id字段等。


查看完整回答
反對 回復(fù) 2019-08-19
?
慕的地8271018

TA貢獻1796條經(jīng)驗 獲得超4個贊

最簡單的方法是在MyClass類中編寫一個復(fù)制構(gòu)造函數(shù)。

像這樣的東西:

namespace Example{
    class MyClass
    {
        public int val;

        public MyClass()
        {
        }

        public MyClass(MyClass other)
        {
            val = other.val;
        }
    }}

第二個構(gòu)造函數(shù)只接受他自己類型的參數(shù)(您要復(fù)制的參數(shù))并創(chuàng)建一個分配了相同值的新對象

class Program{
    static void Main(string[] args)
    {
        MyClass objectA = new MyClass();
        MyClass objectB = new MyClass(objectA);
        objectA.val = 10;
        objectB.val = 20;
        Console.WriteLine("objectA.val = {0}", objectA.val);
        Console.WriteLine("objectB.val = {0}", objectB.val);
        Console.ReadKey();
    }}

輸出:

objectA.val = 10objectB.val = 20


查看完整回答
反對 回復(fù) 2019-08-19
  • 3 回答
  • 0 關(guān)注
  • 902 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號