值類型與引用類型的區別(基於C#) 1.類型分布 C#中值類型包含以下類型:簡單類型、結構類型(struct)、枚舉類型(enum)。 其中簡單類型包含:整數類型(int),布爾類型(bool),字符類型(char),實數類型(double,decimal),結構和枚舉不必多說,結構就是分裝用來存儲小的變量組,枚舉你懂得。 C#中引用類型包含以下類型:類,接口,數組和委托,這些都屬於引用類型。 2.存儲 C#中值類型存儲的是值,值類型通常被分配在堆棧上。 C#中引用類型的實例分配在堆上,新建一個引用類型實例,得到的變量值對應的是該實例的內存分配地址,這就像您的銀行賬號一樣。 3.Demo using System; using System.Collections.Generic; using System.Text; namespace ConsoleApplication1 { class Person { public int Blood = 10; } class Program { public static void Add(int x) { x += 10; Console.WriteLine("值類型當參數被傳遞並修改之後:"+x); } public static void Add(Person person) { person.Blood += 10; Console.WriteLine("引用類型當參數被傳遞並修改之後:" + person.Blood); } static void Main(string[] args) { //值類型變量 int i = 10; Console.WriteLine("i的原值:" + i); Add(i); Console.WriteLine("但是i的值並沒有因為函數的修改而修改:" + i); //引用類型變量 Person person = new Person(); Console.WriteLine("Blood的原值:" + person.Blood); Add(person); www.2cto.com Console.WriteLine("但是Blood的值因為函數的修改而修改:" + person.Blood); //值類型和引用類型的區別,就在於當函數參數傳遞的時候. //值類型是把自己的值復制一份傳遞給別的函數操作.無論復制的值怎麼被改變.其自身的值是不會改變的 //而引用類型是把自己的內存地址傳遞給別的函數操作.操作的就是引用類型值的本身.所以值被函數改變了. //這就是傳值和傳址的區別 Console.ReadLine(); } } }