參考型別和實值型別

來源:互聯網
上載者:User

標籤:複製   通過   int   frame   初始化   分配   引用   ring   har   

CLR支援兩種類型:參考型別和實值型別。

參考型別總是從託管堆上分配,實值型別一般線上程棧上分配。

在.NET Framework SDK中指出,任何稱為類的類型都是參考型別,所有實值型別都成為結構或枚舉

以下代碼示範實值型別與參考型別區別

class someref{    public int x;//參考型別}struct someval{    public int x;//實值型別}namespace 實值型別_參考型別{    class Program    {        static void Main(string[] args)        {            someref r1 = new someref();//在堆上分配            someval v1 = new someval();//在棧上分配            r1.x = 5;//提領指標            v1.x = 5;//在棧上修改            Console.WriteLine(r1.x);//顯示5            Console.WriteLine(v1.x);//顯示5            Console.ReadKey();            someref r2 = r1;//只複製引用(指標)            someval v2 = v1;//在棧上從新分配並複製成員            r1.x = 8;//r1,r2會同時改變,因為r1跟r2指向同一個東西            v1.x = 9;//只改變v1,v2不變,因為v1,v2是兩個東西            Console.WriteLine(r1.x);//顯示8            Console.WriteLine(r2.x);//顯示8            Console.WriteLine(v1.x);//顯示9            Console.WriteLine(v2.x);//顯示5        }    }}

實值型別與參考型別的一些區別

     實值型別有已裝箱和未裝箱兩種形式,,參考型別總是處於已裝箱形式。

     實值型別從System.ValueType派生,該類型直接從System.Object派生,他重寫了System.Object的Equals和GetHashCode方法。

     實值型別不能作為基類定義一個新的基底類型或者參考型別,所以不能再實值型別中引入新的虛方法,所有方法不能是抽象的,所有方法都不能重寫。

     參考型別的變數包含的是堆上的一個對象的地址。預設建立時被初始化為null,表明參考型別的變數當前不指向一個有效對象。實值型別的標量重視包含其基礎類型的一個值,而且

實值型別的所有成員都初始化為0,。

     將一個實值型別的變數賦給另一個實值型別變數時會進行一次逐欄位的複製。將參考型別的變數賦給另一個參考型別時,只複製記憶體位址(如上例)。

     基於上一條,可能會有多個參考型別變數引用堆中的同一個對象,所以對一個變數的操作可能會影響其他變數引用的對象。相反實值型別不會。

     由於未裝箱的實值型別不在堆上分配,當定義該類型的方法不處於活動狀態時就會被釋放,也不會通過Finalize方法接收到通知。

參考型別和實值型別

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.