簡體   English   中英

C# 抽象 Class 具有抽象變量

[英]C# Abstract Class having Abstract Variables

我們有一個名為 Game 的抽象 class。

public abstract class Game
{
   protected Player player;

   public virtual void InitPlayer()
   {
      // steps
      player = new Player(xxxxxxx);
   }

   // Other methods manipulating data from player.
}

並且有兩個 Game 的子類,比如說GameAGameB

public class GameA : Game
{     
    public override void InitPlayer()
    {
        base.InitPlayer();
    }
}

然而,游戲 Class 中的玩家變量也是抽象的,有PlayerGameAPlayerGameB

public abstract class Player
{
}

public class PlayerGameA : Player
{
}

請注意, Player 和 PlayerGameA 構造函數具有相同的 arguments。

現在我有一個關於在 InitPlayer 方法中創建 Abstract Class 實例的問題。 我想要的結果是在創建 GameA 的實例並調用 gameA.InitPlayer() 時統一結果將創建playerGameA ,而 GameClass 中的其他方法仍需要能夠操作來自該玩家變量的數據。

您可以采取多種方法。 一個簡單的方法是讓您的具體Game子類負責提供Player的具體實現,例如:

public abstract class Game
{
    protected Player player;

    protected void InitPlayer(Player concretePlayer)
    {
        // steps
        player = concretePlayer;
    }
}

public class GameA : Game
{
    public void InitPlayer()
    {
        base.InitPlayer(new PlayerGameA());
    }
}

更好的方法是讓Game接受一個通用參數TPlayer

但是您應該將任何非通用功能放在GameBase非通用 class

public abstract class GameBase
{
    // non generic functionality here
}

public abstract class Game<TPlayer> : GameBase where TPlayer : Player
{
    protected TPlayer player;

    protected void InitPlayer(TPlayer concretePlayer)
    {
        // steps
        player = concretePlayer;
    }
}

public class GameA : Game<PlayerGameA>
{
    public void InitPlayer()
    {
        base.InitPlayer(new PlayerGameA());
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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