Unity3D脚本语言的类型系统

C#的类型系统

C#是静态,安全,大多数时候显示的语言,而且所有类型都派生自Object类,同时Unity都是以MonoBehavior这个类作为基础的。

值类型与引用类型

引用类型

引用类型总是从托管堆分配,而C#要求所有对象都是用new关键词来创建。

简单介绍一下new操作符所做的事情:

  1. 计算所需内存空间,new操作符会计算其所有基类中定义的所有实例字段所需字节数。同时为了方便Mono运行时管理对象,还有一些额外信息需要托管堆为其分配空间,如类型对象指针和同步索引块。
  2. 在托管堆上分配其所要的内存空间,分配的所有字节设为0
  3. 初始化对象的类型对象指针和同步索引块
  4. 调用类型的实例构造器,同时编译器会自动调用当前类型的基类构造器
  5. 最后返回一个新建对象的引用,这就是说新建的变量是一个引用而不是对象本身

综上,引用类型可以概括为以下四点:

  1. 存储引用类型对象的内存空间从托管堆上分配
  2. 每一个对象都有额外的成员为Mono运行时提供操作该对象的信息
  3. 对象中的其他字段的字节总是0
  4. 并没有一个关键词能删除对象,所以当没有空间可用时会触发垃圾回收

值类型

如果所有类型都是引用类型,那么会消耗巨大的内存分配。因此,值类型实例都是分配在线程栈上的,并且不受垃圾回收(GC)影响

此外,值类型不能派生出其他类型,而且是隐式密封的。这就导致无须提供额外信息,也就不需要再托管堆上为其分配空间

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值