有些時候我們需要將兩個不同的類相互進行轉換,就像Object類可以轉換爲Bool一樣(如圖1),不論是使用 if(Object) 還是 if(Object != null) 效果完全一致,這實際上是因爲Unity在Object類中已經爲我們定義了Object到Bool的隱式轉換(Implicit Conversion,如圖2),同樣的,我
們也可以使用相同的方式讓一組自己的自定類之間可以相互轉換。
Unity版本:2020.3.12f1
|
圖1:Object隱式轉換爲Bool
|
|
圖2:UnityEngine.Object類中的隱式轉換 |
首先,我们分別定義兩個名爲"Class1""Class2"的類(如圖3)。
|
圖3:定義類 |
定義Class1到Class2以及Class2到Class1的隱式操作符
(如圖4)。
|
圖4:定義兩個類之間的隱式轉換關係 |
經過一系列的操作,現在可以發現Class1和Class2之間可以相互轉換了(如圖5)
|
圖5:class1和class2相互轉換 |
注意:implicit operator只能在要轉換的Class中的其中一個中定義,不可在除這些類之外的任何一個類中定義(包括父類)。
|
錯誤示例 |
|
正確示例
|
同時,同一個
implicit operator在兩個類中只能存在一個
錯誤糾正:圖4中首行注釋「將Class2隱式轉換爲Class1」應爲「將Class1隱式轉換爲Class2」
回覆刪除