K M*_*hta 0 c# inheritance casting
假设我有一个名为的抽象类Player.类GameAPlayer和GameBPlayer继承自Player.反过来,一些抽象类继承GameAPlayer和GameBPlayer分别继承.
假设我有另一个抽象类叫Engine哪个主机List<Player>.类GameAEngine和GameBEngine都继承自Engine.我知道一个事实,即所有球员GameAEngine都是类型GameAPlayer,并且所有球员都GameBEngine将是类型GameBPlayer.
我无法List<Player>进入GameAEngine,GameBEngine因为我正在使用列表Engine本身.
不得不进行类型Player转换GameAPlayer,GameBPlayer每次我在各自的引擎中使用列表时,似乎都是不洁净的.我有什么方法可以避免这样做吗?
您正在经历所谓的"并行层次结构问题"的痛苦.历史上,面向对象语言在处理并行层次结构问题方面做得很差.
关于这个问题以及各种技术如何处理它有很多有趣的讨论; 没有扣篮解决方案.您可以从阅读本讨论开始:
http://lambda-the-ultimate.org/node/1621
此外,还有很多关于此区域的Stack Overflow问题.
https://stackoverflow.com/search?q=parallel+hierarchies