我有一个通用的基本接口IGameble(例如移动是通用的)和类:从通用接口IGable派生的国际象棋和井字棋(以及更多棋盘游戏)但不再是通用的。如何在C#中使用多态而不是泛型
我想设计类代理(可能有几种,这些),将发挥任何类型的游戏(不是在同一时间),但问题是,我不能
例如:
interface IGame<T_move,T_matrix>
{
T_matrix[,] game_state { get; }
void MakeMove(Move mov);
List<Move> ListAllMoves();
...// some more irrelevant code
}
class Tic_Tac_Toe : IGameble<Tuple<int,int>,int>
{
public int turn;
public int[,] game_state;
public List<Tuple<int,int>> ListAllMoves() {...}
public void MakeMove(Tuple<int,int> mov) {...}
}
public Chess : IGameble <some other kind> //...
// so on more classes which uses other kind in the generic.
interface IAgent<Move>
{
Move MakeMove();
}
public RandomAgent<T_Move,T_Matrix> : IAgent
{
public IGameble<T_move> game;
public D(IGameble game_) {game = game_}
public T_Move MakeMove() {//randomly select a move}
}
public UserAgent<T_Move,T_Matrix> : IAgent {get the move from the user}
的问题是,我想随机代理(或任何其他代理人)玩所有的游戏(每次1个游戏)的1个实例,并使用通用强制我专门选择的类型T_Move的和我想要使用的T_Matrix。
我可能会把它全部弄错,并使用通用性很差。
有人建议使用IMovable和IBoardable,而不是通用。这是正确的设计吗?它能解决所有问题吗?
我仍然在设计模式在C#:(一noobie
此外,我将非常感激,如果有人能得到一些设计模式的链接,可以帮助我在这里(如果有..)
什么是你T上的目的是什么?我无法完全理解你想要达到的目标。你可以在你的界面中添加一些方法吗?将一些实现放在可以更加描述问题的类中。 – kat1330
给一些更多的真实世界的代码。像A B C D E这样的命名会烧伤我的大脑。 – apocalypse
目前还不清楚你的目标是什么。您的通用界面很可能是您为实现目标而设计不当,并且正在努力将语言适合您的不当设计 –