![](/img/trans.png)
[英]How to pass a base class as input parameter to the constructor of the derived class?
[英]How to pass derived class as a parameter to a method that asks for a base class
注意我是一個初學者。
我通讀了這個問題,並了解將派生類傳遞給要求基類的方法是完全可以的,應該可以。
好吧,我有一個繼承自“ PhysicsObject”的類“ Enemy”。 但是,當我編寫以下沖突處理程序並使用PhysicsObject和Enemy對其進行調用時:
void ProjectileHit(PhysicsObject p, PhysicsObject hit)
{
hit.TakeDamage(CurrentPlayer.EquippedTool.Damage);
}
我在Visual Studio中看到一條紅線,說PhysicsObject不包含“ TakeDamage”的定義。 沖突處理程序是我使用的框架的一部分,並且僅接受似乎是基類的實例。 有什么方法可以將實例傳遞給“敵人”到該處理程序並在其中調用“ TakeDamage”?
編輯:這項工作嗎?
void ProjectileHit(PhysicsObject p, PhysicsObject hit)
{
Enemy e = hit as Enemy;
e.TakeDamage(CurrentPlayer.EquippedTool.Damage);
}
只要您的PhysicsObject沒有實現TakeDamage方法(並且永遠不應該讀取類名),您就可以執行以下操作:
void ProjectileHit(PhysicsObject p, PhysicsObject hit)
{
(hit as Enemy)?.TakeDamage(CurrentPlayer.EquippedTool.Damage);
}
“ as”會嘗試將匹配項強制轉換為敵人,如果hit為null或強制轉換失敗,則返回null。
'?' 僅當左側不為null時,才在右側執行代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.