我正在为简单的棋盘游戏等开发通用游戏引擎。我正在定义每个游戏都需要实现的接口(interface),我有 IGame、IGameState、IBoardEvaluator 和 IMove 等类。
我有像 IGame.PerformMove(IMove move) 这样的方法,我想对其进行限制。如果我在玩井字游戏,我想强制我只能使用具体类 TTTGame、TTTState、TTTMove 等...
我可以想出几种方法来做到这一点,但没有一种听起来有趣。也许所有类都可以有一个通用参数,我可以确保它匹配。
so IGame<T> has method PerformMove(IMove<T> move)
如果成功了,我就不知道为 T 使用什么类了。也许这并不重要。
我的另一个想法是在 IGame 上放置一堆通用参数,并为它提供我需要的所有类。所以我会创建 class TTTGame<TTTMove,TTTState,TTTMove....>
那也不漂亮。有没有一种通用的模式可以做到这一点?
最佳答案
我看不出指定 TTTGame 类只能采用 TTTMoves 有什么好处。
我想你可能在这里过度工程了。
您这样做唯一可以保护自己免受某些流氓 MonopolyMove 类变得 self 意识并将其自身放入您的代码中。
我说坚持接口(interface)定义并避免泛型,除非你有一个真正有效的案例。根据你提到的,我没有看到一个。
关于c# - 如何对泛型类进行分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1912548/