C# 隱式轉換


有些時候我們需要將兩個不同的類相互進行轉換,就像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在兩個類中只能存在一個

留言

  1. 錯誤糾正:圖4中首行注釋「將Class2隱式轉換爲Class1」應爲「將Class1隱式轉換爲Class2」

    回覆刪除

發佈留言

歡迎在此寫下你的感想。