亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C#中b=a的多種情況及結果分析

發布時間:2021-09-09 10:06:56 來源:億速云 閱讀:123 作者:chen 欄目:編程語言

這篇文章主要介紹“C#中b=a的多種情況及結果分析”,在日常操作中,相信很多人在C#中b=a的多種情況及結果分析問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”C#中b=a的多種情況及結果分析”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

兩個相同類型的變量a和b,并且有如下關系:

b=a;

如果a發生改變,b是否也發生改變呢?

情況很復雜,分以下幾種情況談論:

1) 單個實體

1. 簡單類型

先考察int:

inta=1; intb=a; a=2; Console.WriteLine("b:"+b);

輸出結果:

C#中b=a的多種情況及結果分析

再考察一下string:

stringa="1"; stringb=a; a="2"; Console.WriteLine("b:"+b);

輸出結果:

C#中b=a的多種情況及結果分析

如果不放心,還可以測試一下Enum,結果類似,詳見Demo。

結論:簡單類型是組成復合類型的最基本單位,是原子,不可再拆分,所以不管是值類型double、int還是引用類型string,b都不隨a的改變而改變,因為它們指向全局堆棧(對于string而言是托管堆)上的同一個地址。

2. 復合類型

復合類型是由string、int、double這些簡單類型組成的。

分別定義一個復合的引用類型(class)和一個復合的值類型(struct)。

classUserInfo { publicstringUserName; publicintAge; } structUserInfo2 { publicstringUserName; publicintAge; }

先討論引用類型:

UserInfoa=newUserInfo(){UserName="Baobao",Age=27}; UserInfob=a; a.UserName="AndersLiu"; a.Age=30; Console.WriteLine("b.UserName:"+b.UserName); Console.WriteLine("b.Age:"+b.Age);

輸出結果:

C#中b=a的多種情況及結果分析

結論:b和a仍然指向托管堆上的同一個UserInfo實例的地址。而UserInfo實例的成員又包含著UserName和Age分別在托管堆和全局堆棧上的地址。所以修改a的成員UserName和Age,只是改變這兩個成員的地址,而沒有改變UserInfo實例的地址,所以b的成員UserName和Age也會跟著改變。

讓我們局部修改上面的代碼:

UserInfoa=newUserInfo(){UserName="Baobao",Age=27}; UserInfob=a; //a.UserName="AndersLiu"; //a.Age=30; a=newUserInfo(){UserName="AndersLiu",Age=30}; Console.WriteLine("b.UserName:"+b.UserName); Console.WriteLine("b.Age:"+b.Age);

輸出結果:

C#中b=a的多種情況及結果分析

結論:對a重新進行實例化,導致a指向一個新的UserInfo實例的地址。而b仍然指向原先那個UserInfo實例的地址,所以b不會隨著a的改變而改變。從此b和a是兩個沒有任何關系的變量。

再來看一下值類型:

UserInfo2a=newUserInfo2(){UserName="Baobao",Age=27}; UserInfo2b=a; a.UserName="AndersLiu"; a.Age=30; Console.WriteLine("b.UserName:"+b.UserName); Console.WriteLine("b.Age:"+b.Age);

輸出結果:

C#中b=a的多種情況及結果分析

結論:問題集中在b=a這句話上。這時b指向的是a的一份copy,指向全局堆棧上的與a不同的地址。所以b和a是沒有任何關系的,b不隨a的改變而改變。


2) 集合

1.集合中一筆數據的增刪修改。

List<UserInfo>a=newList<UserInfo>(); List<UserInfo>b=a; a.Add(newUserInfo(){UserName="Baobao",Age=27}); Console.WriteLine("b.Countafteradding:"+b.Count); Console.WriteLine(); Console.WriteLine("Aftermodifyinga[0]"); a[0].UserName="AndersLiu"; a[0].Age=30; Console.WriteLine("b[0].UserName:"+b[0].UserName); Console.WriteLine("b[0].Age:"+b[0].Age); Console.WriteLine(); a.Remove(a[0]); Console.WriteLine("b.Countafterdeleting:"+b.Count);

輸出結果:

C#中b=a的多種情況及結果分析

結論:b隨著a中數據增減修改而變化。因為b和a指向托管堆上同一個List實例的內存地址,這和復合類型是一樣的。

數組就不說了,可以看作是多個變量的集合,所以按照集合來處理。

到此,關于“C#中b=a的多種情況及結果分析”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

新龙县| 龙井市| 三门县| 贺州市| 胶南市| 和静县| 富阳市| 内江市| 和政县| 南汇区| 福州市| 上林县| 思茅市| 台湾省| 曲沃县| 鄂托克前旗| 孟津县| 丰城市| 秭归县| 平阴县| 克东县| 九龙城区| 浮山县| 山东| 绥阳县| 滨州市| 北川| 桐柏县| 安达市| 海兴县| 沙雅县| 徐闻县| 榆社县| 江永县| 吴桥县| 钟祥市| 库车县| 阳城县| 罗田县| 南宁市| 工布江达县|