[英]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 的子類,比如說GameA和GameB 。
public class GameA : Game
{
public override void InitPlayer()
{
base.InitPlayer();
}
}
然而,游戲 Class 中的玩家變量也是抽象的,有PlayerGameA和PlayerGameB 。
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.