我试图在这里做点什么,我可能做得不对......
我有一个基类"伤害",一个派生类"近战:伤害",另一个派生类"远程:伤害"。
然后我有一个" Unit" class,和派生类" 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')类型"。
我可以理解为什么:我声明这个dmg属于" Damage"。我想我希望当我将它设置为= new Melee()时,它会永远记住它是近战伤害,没有进一步的麻烦。
知道伤害是近战的最简单方法是什么?
答案 0 :(得分:0)
感谢评论家伙。当我看到它应该工作的+1时,我再次看了一眼,发现了我的问题。我试过用这行代码测试它:
Debug.Write("Does this.dmg == Melee?" + this.dmg is Melee));
当然这给了错误,因为我忘了括号。我把它更正为:
Debug.Write("Does this.dmg == Melee?" + (this.dmg is Melee)));
问题已经消失。我也花了很多时间来测试它,以确保它,并且肯定这是有效的。如果我将它设置为this.dmg = Ranged(),则它不再是“真”,它是近战,反之亦然。