[英]C# - Create class instance inside another class with same meaning
我想創建一個名為Enemy
的類,該類應在已編程的rpg主題戰斗系統中使用。 問題是我想在Enemy
類中創建多種怪物類型,但隨后我必須為每個敵人類(例如Enemy.Goblin
或Enemy.Golem
的戰斗系統創造一種可能性。
題:
我如何在戰役系統功能中僅使用一個參數來實現這一目標? 我想用
public static void InitiateBattle ( Player player, Enemy enemy )
但是現在我不能使用Enemy.Goblin
實例,因為它不能將Enemy.Goblin
隱式轉換為Enemy
。 我如何最輕松地以最少的代碼解決此問題?
您需要使用繼承 。
public class Enemy
{
// put all properties and methods common to all here
}
public class Goblin: Enemy
{
// goblin specific stuff here
}
這樣您就可以將小妖精作為敵人通過。
聽起來您想使用繼承嗎?
public class Enemy {}
public class Goblin : Enemy {}
public class Golem : Enemy {}
然后,您可以將Goblin
或Golem
的實例傳遞給您的方法,該語句將有效,因為編譯器會將您的對象“裝箱”到父類型的實例中。
然后,如果要使用Goblin或Golem子類中的成員,則需要使用as
將“ enemy
參數變量“投射”回適當的類型:
public static void InitiateBattle (Player player, Enemy enemy)
{
var golem = enemy as Golem;
var goblin = enemy as Goblin;
}
確保在轉換后檢查null!
請記住,C#不允許多重繼承。 每個類只能從一個父級繼承。
我認為最好使用界面。
public interface IEnemy
{
//e.g.
public void Attack();
}
public class Goblin : IEnemy
{
public void Attack()
{
throw new System.NotImplementedException();
}
}
public class Battle
{
public static void InitiateBattle(Player player, IEnemy enemy);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.