C#如何更好地理解引用類型和值類型

說道值類型和引用類型,在C#中,官方的說法就是:數組

值類型直接指向數據;通常包括C#自帶的全部數字類型,字符類型,bool類型,固然還有自定義的結構類型和枚舉類型ide

而引用類型則是指向數據存儲的地址。通常指全部類,數組,代理和接口類型。請注意還包括字符類型spa

值類型與引用類型的根本區別就是它們在內存中處理的方式:代理

值類型的內容僅僅就是對類型的值;爲一個值類型實例賦值老是賦值這個值的實例。好比 int a=1; int b=a;那麼爲b賦值的時候,就是把a的值複製一份,在內存中心建立一塊區域保存b的值。a和b的存儲是獨立的。code

而引用類型比值類型複雜,引用類型包括兩部分:對象和指向對象的引用。引用類型變量是指向包含值的對象的引用。好比class a=new class(); class b=a;那麼爲b賦值的時候,僅僅把a的引用地址複製給b。這樣a和b就指向內存中的同一個地址。a和b是關聯的。對象

 

下面咱們來舉一個例,來講明值類型和引用類型在內存中的差異:blog

public class Staff
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int Salary { get; set; }
}

public struct Employee
{
    public string FirstName{get;set;}
     public string LastName { get; set; }
    public int Salary { get; set; }
}

...
private static void Demo()
{

    Staff s1 = new Staff { FirstName = "123" };
    Staff s2 = s1;
    s2.FirstName = "abc";

    Employee e1 = new Employee { FirstName = "123" };
    Employee e2 = e1;
    e2.FirstName = "abc";

    Console.WriteLine("s1="+s1.FirstName+", e1=" + e1.FirstName)
}
Difference between val and ref type

輸出結果爲:s1=abc, e1=123
注意s1爲引用類型,e1爲結構類型(值類型)接口

相關文章
相關標籤/搜索