C#中的"虚拟列表"以避免继承类中的类型转换?

K M*_*hta 0 c# inheritance casting

假设我有一个名为的抽象类Player.类GameAPlayerGameBPlayer继承自Player.反过来,一些抽象类继承GameAPlayerGameBPlayer分别继承.

假设我有另一个抽象类叫Engine哪个主机List<Player>.类GameAEngineGameBEngine都继承自Engine.我知道一个事实,即所有球员GameAEngine都是类型GameAPlayer,并且所有球员都GameBEngine将是类型GameBPlayer.

我无法List<Player>进入GameAEngine,GameBEngine因为我正在使用列表Engine本身.

不得不进行类型Player转换GameAPlayer,GameBPlayer每次我在各自的引擎中使用列表时,似乎都是不洁净的.我有什么方法可以避免这样做吗?

Eri*_*ert 6

您正在经历所谓的"并行层次结构问题"的痛苦.历史上,面向对象语言在处理并行层次结构问题方面做得很差.

关于这个问题以及各种技术如何处理它有很多有趣的讨论; 没有扣篮解决方案.您可以从阅读本讨论开始:

http://lambda-the-ultimate.org/node/1621

此外,还有很多关于此区域的Stack Overflow问题.

https://stackoverflow.com/search?q=parallel+hierarchies