Unity中的结构体(C#)
转载chqj_163 最后发布于2019-02-18 20:08:43 阅读数 102 收藏
展开
结构体和类很像,但完全不同。抱歉:) 如果你不知道结构体,或者你想用结构体,或者你不知道传引用和传值的差别,那么这一课就是为你量身定做。
Unity中的结构体
既然这个系列是为了Unity而学习C#的,那先来了解一下,那些已经使用了结构体的地方吧。
- Vector2, Vector3 和 Vector4
- Rect
- Color和Color32
- Bounds
- Touch
尤其,各种形式的Vector(2-4)使用的非常广泛。你会发现它们被用于存储各种信息,从变换的位置、旋转、大小,到刚体的速度,或者触摸、点击的屏幕位置。
什么是结构体
结构体是一种复合数据类型。它和类很像,你可以用相同的方式定义域和方法。下面的例子定义了一个结构体和一个类,它们几乎是一样的
-
public struct PointA
-
{
-
public int x;
-
public int y;
-
}
-
public class PointB
-
{
-
public int x;
-
public int y;
-
}
在这个例子中,最显著区别就是关键字——“struct”而不是“class”。其他区别包括:
- 结构体不能从基类继承,但类可以
- 结构体不能有无参构造函数
- 在构造函数结束之前,所有的结构体域都必须被赋值
- 结构体是传值,而类的实例是传引用
最后一点,对我来说也是最重要一点。“值”类型和“引用”类型之间有很显著的差别,它会影响到应该何时及如何使用它们。
引用类型
当说到类的实例是传引用时,实际过程是,先获取一个指针,它指向对象在内存中的地址,然后传递这个指针。这很重要,因为一个类的实例,实际上可能很大,包含了很多域甚至其他对象。在这种情况下,赋值和传递整个实例可能非常影响性能,这就为什么要用传地址来替代。
引用类型在“堆”上分配,在调用“垃圾回收”时被清理。垃圾回收是一个自动的过程,但是它很慢,通常会降游戏的帧率。基