C#中一個參數的類型有值類型與引用類型,像int、bool、double、decimal、char、struct、enum等是屬於值類型,而像string、自定義類、數組等是屬於引用類型數組
(1)值類型繼承自System.valueType,而引用類型繼承自System.Object。spa
(2)值類型的長度是固定的,引用類型的長度是可變的,而且值類型的值不能爲null,若是要將值類型的值賦值爲null,就要將值類型定義爲可空的類型 int? a=null;code
(3)在儲上值類型存儲在棧中,而引用引用類型存儲在堆中,引用類型一樣在棧中開闢了空間,用來存放指向堆中的地址blog
//定義一個Person類 public class Person { public string Name{get;set;} public int Age{get;set;} }
public void Fun() { Person p=new person(); p.name="11"; Person p1=p;//把p在棧中開闢的地址複製給p1,這樣p1就指向p在堆中開闢的空間 p1.name="22"; console.writeline(p.name)//輸出的結果是"22"; };
Person p1=p是把p在棧中開闢的地址假設爲0x0001,這個地址指向的是p在堆中開闢的一塊空間,賦值給了p1,這樣p1的地址也就爲0x0001,這樣p1就指向了0x0001這個地址指向的空間
而引用類型中string做爲一個特殊的存在,具備不可變性的特色繼承
string str1 = "aa!";
string str2 = "bb";
string str3 = str2;
Console.WriteLine("{0}\n{1}\n{2}", str1, str2,str3);ci
//輸出的結果是 aa bb bb