Unity3D學習筆記(3)C#中的值類型和引用類型

在用Unity3D開發遊戲項目前,首先要對Unity3D選擇提供給遊戲開發者的腳本語言C#的特點要有一定了解,在C#中有兩種類型:值類型和引用類型。

值類型和引用類型的區別如下:

    1、值類型是直接存儲值,引用類型是存儲對值的引用。

    2、引用類型總是被放在堆中,而值類型總是放在它被聲明的地方(注意“引用類型保存在堆上,值類型保存在線程棧上”這句話是不準確的,值類型雖然大多數時候保存在線程棧上,但是有些時候也會保存在堆上,比如類中的成員變量)。

    3、當比較兩個值類型的時候,進行的是內容比較;當比較兩個引用類型的時候,進行的是引用比較。

    4、值類型都是派生自抽象類型System.ValueType的,引用類型的基類都是Object。


值類型和引用類型的關係圖如下:


這裏有幾個容易搞錯的點:

    1、string類型即System.String,雖然string類型是不可變的,但它是引用類型而不是值類型。string類型的值並非一個實際的字符串,而是對字符串的一個引用,但是string的比較可以用==或者Equal(),會比較string類型的值而不是引用,這一點看起來像是值類型的特點,實際上是因爲重載了運算符==和方法Equal。

    2、struct值類型而不是引用類型。

    3、賦值的機制值類型和引用類型是不同的,將一個值類型變量賦給另一個值類型變量時,將複製其包含的值。引用類型變量的賦值只複製對對象的引用,不復制對象本身。(另:將值類型變量賦給引用類型變量時就涉及到裝箱和拆箱了)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章