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

1. C#中的数据类型分为值类型,和引用类型
C#中的值类型和引用类型_第1张图片
值类型,改变只改变该变量的值,
引用类型记录的是一个地址,记录其包含的所有变量的存储位置。

举个例子

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++差别很大:
C#中的值类型和引用类型_第2张图片

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
在这里插入图片描述

你可能感兴趣的:(C#语言)