如何将派生类作为参数传递给要求基类

时间:2016-10-31 14:20:38

标签: c# inheritance polymorphism

注意我是初学者。

我读完了这个this question,我明白将派生类传递给一个要求基类的方法是完全正常的,应该可以工作。

好吧,我有一个继承“PhysicsObject”的“Enemy”类。 但是当我编写下面的碰撞处理程序并用PhysicsObject和Enemy调用它时:

void ProjectileHit(PhysicsObject p, PhysicsObject hit)
{
    hit.TakeDamage(CurrentPlayer.EquippedTool.Damage);
}

我在视觉工作室得到一条红线说 PhysicsObject不包含“TakeDamage”的定义。 碰撞处理程序是我使用的框架的一部分,只接受它看起来的基类的实例。有没有办法将实例传递给“Enemy”到该处理程序并在其中调用“TakeDamage”?

编辑: 这会有用吗?

void ProjectileHit(PhysicsObject p, PhysicsObject hit)
{
    Enemy e = hit as Enemy;
    e.TakeDamage(CurrentPlayer.EquippedTool.Damage);
}

1 个答案:

答案 0 :(得分:1)

只要您的PhysicsObject没有实现TakeDamage方法(并且从不读它的类名),您可以执行以下操作:

void ProjectileHit(PhysicsObject p, PhysicsObject hit)
{
    (hit as Enemy)?.TakeDamage(CurrentPlayer.EquippedTool.Damage);
}

'如'尝试将命中强制转换为Enemy,如果命中为null或转换失败,则返回null。

''仅当左侧不为空时才执行其右侧的代码。