C#中的值型別與引用型別
阿新 • • 發佈:2021-12-11
一、值型別:int double char decimal bool enum struct
二、引用型別:string 陣列 自定義 集合 object 介面
三、值傳遞和引用傳遞
值型別在複製的時候,傳遞的是這個值的本身
int n1 = 10; int n2 = n1; n2 = 20; Console.WriteLine(n1); Console.WriteLine(n2);
輸出:
10
20
引用型別在複製的時候,傳遞的是對這個物件的引用
class Program {static void Main(string[] args) { Person p1 = new Person(); p1.Name = "張三"; Person p2 = p1; p2.Name = "李四"; Console.WriteLine(p1.Name); Console.WriteLine(p2.Name); Console.ReadKey(); } } publicclass Person { private string _name; public string Name { get { return _name; } set { _name = value; } } }
輸出:
李四
李四
四、原因解釋
值型別是儲存在棧中的,而引用型別是儲存在堆中;值型別在傳遞的時候,傳遞的是值的本身,而引用型別則是傳遞多的是地址
Rerson p2=p1;傳遞的僅僅是地址,p1與p2指向的是堆中的同一塊儲存單元,所以無論是p1的值還是p2的值發生改變,兩者的值都會發生改變;
五、引用中的特殊例子,string型別
由於string型別具有唯一不變性;所以它的傳遞與值型別的相同;
string s = "abc"; string s2 = s; s = "jc"; Console.WriteLine(s); Console.WriteLine(s2);
輸出:
jc
abc