簡體   English   中英

如何將派生類作為參數傳遞給要求基類的方法

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

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