1. 程式人生 > 其它 >C#中的值型別與引用型別

C#中的值型別與引用型別

一、值型別: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(); } } public
class 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