C#中的值類型和引用類型

1. C#中的數據類型分爲值類型,和引用類型
在這裏插入圖片描述
值類型,改變只改變該變量的值,
引用類型記錄的是一個地址,記錄其包含的所有變量的存儲位置。

舉個例子

using UnityEngine;
using System.Collections;

public class DatatypeScript : MonoBehaviour 
{
    void Start () 
    {
        //Value type variable
        Vector3 pos = transform.position;  //值類型,改變pos,不會改變transform
        pos = new Vector3(0, 2, 0);
        
        //Reference type variable
        Transform tran = transform;    //引用類型,改變pos,會改變transform,相當於C++中的引用(即別名)
        tran.position = new Vector3(0, 2, 0);
    }
}

也就是說,所有Class類型都是引用類型,如果不使用new的話,創建的都是原class的重命名,這一點跟C++差別很大:
在這裏插入圖片描述

2. 對於值類型的裝箱操作會引起GC,因爲要把值轉爲Object,而引用類型的裝箱操作則不會,因爲引用類型不會生成新的Object:
比如下列代碼,會引起GC

    void Update()
    {
        int a = 5;
        for (int i = 0; i < 400; i++)
        {
            UnityEngine.Profiling.Profiler.BeginSample("contain");
            Func(a);
            UnityEngine.Profiling.Profiler.EndSample();
        }
    }

    public void Func(int p)
    {
        if ((System.Object)(p)==wp)
        {
            return ;
        }
    }

會引起GC
在這裏插入圖片描述

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