Unity3D學習資源 C 黎克特制轉換

2021-07-05 18:51:03 字數 2435 閱讀 9279

物件導向三大特性分別是封裝,繼承和多型,物件導向程式設計的主要思想就是建立物件,呼叫方法達到解決問題的目的.但是好多初學者在多型方面不是太理解,主要是因為有乙個概念沒有搞清楚,那就是黎克特制轉換;

具有繼承關係的父類和子類進行黎克特制轉換時要遵循以下兩個原則:

1.可以把子類直接賦值給父類,即父類的位置都可以用子類來替換;

2.在上面1的基礎上,可以把父類強制轉換成相對應的子類;

先看如下**:

[c] 

純文字檢視

複製** ?

0102

03

04

05

06

07

08

09

10

11

12

13

14

15

classperson

}

classstudent:person

}

student類繼承了person類,在main方法中的**如下:

[c] 

純文字檢視

複製** ?

12

3

4

5

6

7

8

publicstaticvoidmain(string args)

person類和student類的物件都可以調各自類裡面的公有成員,同時student類的物件也可以調到其父類裡面的公有方法,這是因為student類繼承了person類.把上面的**更改如下:

[c] 

純文字檢視

複製** ?

12

3

4

5

6

7

publicstaticvoidmain(string args)

把子類student的乙個物件賦值給了其父類person的物件,即父類的物件指向子類的物件,系統並沒有報錯,按常理來說學生是人是沒有錯的,從繼承關係來說,子類把父類的成員繼承了過來,父類物件在呼叫父類裡面的公有成員時,仍可以調得到,功能沒有任何改變.這個就是黎克特制轉換第一原則:子類可以直接賦值給其父類,其作用是使資料達到了統一,就如系統裡面提供的方法其引數是object型別一樣,任何資料型別都可以傳遞.假如乙個方法的引數是父類的型別,則在呼叫該方法時可以把子類的物件直接傳遞過來,功能不會受到影響;但是上面的**有乙個問題:把子類物件賦值給父類物件後,再調子類裡面的公有成員時會調不到,那是因為per是父類的物件,其所在父類裡面並沒有子類裡面的成員,所以調不到.想要調到子類裡面的公有成員需把**做如下更改:

[c] 

純文字檢視

複製** ?

0102

03

04

05

06

07

08

09

10

11

publicstaticvoidmain(string args)

在第二行**的基礎上,把父類物件轉換成子類型別,這樣就可以調到子類裡面的公有變數了.這就是黎克特制轉換的第二個原則,有一點需要強調的是必須在第乙個原則的基礎上才可以完成轉換.上面的**用了兩種轉換方法,第一種是強制轉換,如果轉換不成功,系統會報錯,第二種使用as進行轉換,如果能夠轉換則進行轉換,如果不能轉換則返回null,什麼也不做;

通過以上的**我們可以總結出來黎克特制轉換的作用:就是把不同子類的物件統一轉換成其基類的型別,使資料型別達到統一,這樣就可以寫出一套用的**,在基類物件所在的位置都可以傳進來子類的物件,盡可能的來重用所寫的**.

Unity3D 美術資源規範

一.單位,比例統一 在建模型前先設定好單位,在同一場景中會用到的模型的單位設定必須一樣,模型與模型之間的比例要正確,和程式的匯入單位一致,即便到程式需要縮放也可以統一調整縮放比例。統一單位為公尺。二.模型規範 所有角色模型最好站立在原點。沒有特定要求下,必須以物體物件中心為軸心。面數的控制。移動裝置...

Unity3D 動態載入資源

一 內部呼叫 1.resources.load path type 或resources.loadall path type 載入儲存在resources資料夾中path處的資源,必須忽略字尾名。gameobject instance instantiate resources.load enemy...

Unity3D資源存放筆記

昨天記了一篇assetbundle學習筆記,那麼遊戲中的各種資源應該如何存放呢?在網上一陣蒐羅,把筆記記一下。非unity3d指定名稱的資料夾中的資源,如果遊戲場景中有使用到,發布時會被一同打包,沒有使用到則不會被打包。存放到該資料夾下的所有檔案,無論場景中是否使用到,都會被打包。但是資源在打包後只...