Unity3D脚本编程读书笔记——第3章 Unity 3D 脚本语言的类型系统

语言之间的核心区别之一就在于其所拥有的类型系统

文章目录

  • 前言
    • 1. C#的类型系统
        • 1.1. 静态类型
        • 1.2. 类型安全
    • 2. 值类型和引用类型
    • 3. 装箱和拆箱
  • 总结


前言

本篇是针对《Unity3D脚本编程——使用C#语言开发跨平台游戏》一书 第3章节《Unity 3D 脚本语言的类型系统》 的读书笔记,记录了其中一些基础知识、核心要点以及一些有趣的信息。
本章节的核心是对C#编程语言进行介绍,主要是从C#的类型系统(对应C#1的主要特性)下手。从本章开始我们也正式开始了对Unity C#脚本编程的真正的核心内容的学习。


1. C#的类型系统

根据类型系统而进行的语言分类:

  • 强类型/弱类型语言
  • 安全类型语言/不安全类型语言
  • 静态类型语言/动态类型语言

静态不安全类型语言C/C++,静态安全类型语言C#和Java,动态安全类型语言JavaScript。

C#要求所有类型全部从System.Object派生。(MonoBehaviour也是派生自System.Object)

System.Object拥有的最近本的4个公共方法和2个受保护方法:

  • Equals 判断两个对象是否具有相同的值
  • GetHashCode 返回对象的值的哈希码
  • ToString 默认返回类型的完整名称,即this.GetType().FullName。可被重写
  • GetType 返回一个从Type类派生的类型实例,以指出调用GetType方法的对象的类型。常用于为反射提供与对象类型有关的元数据
  • MemberwiseClone
  • Finalize 对象被标记去做垃圾回收,而在真正回收之前,这段区间来执行该方法

1.1. 静态类型

每个变量都有一个特定的类型,且该类型在编译时是确定的,这样的语言被成为是静态类型语言。

当然静态类型系统是存在一些动态行为的,如语言动态多态的实现(虚函数),但是本质上,这种情况在编译时,我们仍然可以是此时其类型是确定的。这种情况也可以称为是静态类型的动态行为。

与之相对的动态类型,变量并不局限于特定的类型。运行环境对待动态类型时是采取了一种恰当的方式来解读变量。

var是C#3引入的关键字,用来表示隐式类型,但是这并不意味着C#成为了动态类型语言,var的作用是帮助开发者进行快捷开发,而背后的类型推导是由编译器来完成的,即在编译时类型仍然是确定的。

1.2. 类型安全

不能将一种类型当作另一种类型,除非他们之间存在某种转换关系。

类型安全是作为对系统的一种限制而存在的,即类型不安全意味着可以做到更多的事,但是同时会带来一定的安全隐患(如类型伪装而导致的安全漏洞)。

C#允许将对象转换为它的实际类型或者它的任何基类。向基类转换无需任何特殊的语法,而向派生类转换的话,需要使用显示转换以提供足够的信息给编译器。

2. 值类型和引用类型

3. 装箱和拆箱


总结

本章着力于阐述Mono运行时以及其在串联低级语言和高级语言时的作用,涉及到的内容艰深晦涩,但好在其中的过程相对比较清晰,需要始终抓住一个核心原理:CIL的多平台支持性。CIL就好像一个转接头,我们需要想办法把代码流进去,而它自然会为你转接到各种各样的设备。

你可能感兴趣的:(Unity,unity,3d,游戏引擎)