[英]c# override type comparison "is"?
我正在嘗試在這里做一些事情,但我可能做得不對......
我有一個基類“Damage”,一個派生類“Melee:Damage”,以及另一個派生類“Ranged:Damage”。
然后我有一個“Unit”類,一個派生類“Warrior:Unit”,以及另一個派生類“archer:Unit”。
所以單位職業可以是近戰的戰士,也可以是遠程的弓箭手。
因此,在我的 Unit 類中,我定義了一個類型為“Public Damage dmg”的變量。
然后在 Warrior 的構造函數中,我設置了“this.dmg = new Melee(dmg_amount);” 在 archer 的構造函數中,我設置了“this.dmg = new Ranged(dmg_amount);”
現在我開始在我的代碼中傳遞這個 unit.dmg 變量,在某些地方我不再真正知道它是弓箭手還是戰士,我只知道傷害。 所以我要做的是通過一些代碼檢查損壞類型,例如:
if (unit.dmg is Melee) {}
但是,它告訴我“給定的表達式永遠不是提供的('Melee')類型”。
我可以理解為什么:我將 this.dmg 聲明為“損壞”類型。 我想我希望當我將它設置為 = new Melee() 時,它會永遠記住它是近戰傷害,不用多說。
知道傷害是近戰的最簡單方法是什么?
謝謝你們的評論。 當我看到它應該工作的 +1 時,我再次查看並發現了我的問題。 我曾嘗試用這行代碼測試它:
Debug.Write("Does this.dmg == Melee?" + this.dmg is Melee));
這當然給出了錯誤,因為我忘記了括號。 我更正為:
Debug.Write("Does this.dmg == Melee?" + (this.dmg is Melee)));
問題就解決了。 我還花時間以各種方式對其進行測試以確保它確實有效。 如果我將它設置為 this.dmg = Ranged(),那么它是近戰就不再是“真”,反之亦然。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.