簡體   English   中英

C#-在另一個具有相同含義的類中創建類實例

[英]C# - Create class instance inside another class with same meaning

我想創建一個名為Enemy的類,該類應在已編程的rpg主題戰斗系統中使用。 問題是我想在Enemy類中創建多種怪物類型,但隨后我必須為每個敵人類(例如Enemy.GoblinEnemy.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 {}

然后,您可以將GoblinGolem的實例傳遞給您的方法,該語句將有效,因為編譯器會將您的對象“裝箱”到父類型的實例中。

然后,如果要使用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.

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