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

浙公网安备 33010602011771号