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就好像一個轉接頭,我們需要想辦法把代碼流進去,而它自然會為你轉接到各種各樣的設備。
總結
以上是生活随笔為你收集整理的Unity3D脚本编程读书笔记——第3章 Unity 3D 脚本语言的类型系统的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 移动通信原理学习笔记之三——抗衰落和链路
- 下一篇: 文件系统的设计与实现(操作系统课程设计)