簡體   English   中英

c#覆蓋類型比較“是”?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM