c# - 如何对泛型类进行分组?

标签 c# generics

我正在为简单的棋盘游戏等开发通用游戏引擎。我正在定义每个游戏都需要实现的接口(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/

相关文章:

generics - 在go中获取不同属性的通用函数

java - 在 Java 类型参数中,<? extends E> 仅表示严格的子类型?还是 E 也足够?

c# - 一个项目中可以有多个APP_CODE文件夹吗

c# - 二十一点纸牌、字符串或整数的数组?

c# - 如何正确使用代码契约?

c# - 如何在我的属性中设置动态值

java - 有没有一种简单的方法可以返回整数值和/或 double 值?

scala - 如何对泛型类型参数进行模式匹配?

c# - 不要使用 'System.Runtime.CompilerServices.DynamicAttribute' 。请改用 'dynamic' 关键字

generics - typescript 泛型类型和未定义