ジェネリックベースのインタフェースIGameble(例:moveはジェネリック)とクラス:ChessとTic-Tac-Toe(さらに多くのボードゲーム)もはや一般的ではありません。C#でgenericの代わりにpolymorphismを使用する方法
は、私は(ない同じ時間で)ゲームのあらゆる種類を再生します(これらのいくつかの種類があるかもしれない)クラスのエージェントを設計したいのですが、問題は、私は、たとえば
を傾けることです。
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よ:(1がある場合、いくつかのいずれかがここで私を助けることができるいくつかのデザインパターン(へのリンクを得ることができる場合も、私はそれを非常に感謝されます
...)私はあなただけis
キーワードを使用することができると思う
あなたTの目的は何ですか?私はあなたが達成しようとしていることを正確に理解できません。あなたのインターフェイスにいくつかのメソッドを置くことができますか?いくつかの実装を、より多くの問題を記述できるクラスに入れてください。 – kat1330
もっと現実的なコードを与えてください。 A B C Eのような名前は私の脳を燃やす。 – apocalypse
あなたの目標は何であるかはっきりしていません。おそらくあなたの汎用インターフェースはあなたが達成しようとしている目標に対して不適切に設計されており、不適切なデザインに言語を適合させるのに苦労しています –