我正准备为我的游戏构建一个2D场景图,我想知道我是否应该使用它的根或一个接口或两个或几个抽象类。这是我的要求:
我应该使用哪种基类/接口方案?
答案 0 :(得分:2)
Jasonh介绍了基础知识 - 使用您想要共享代码的抽象类,否则使用该接口。
我想补充一点 - 即使你去了抽象类路线,我仍然建议创建一个接口。你永远不知道什么时候你想要一个像其他子一样的子类,但是出于某种原因确实需要继承另一个类。抽象基类非常适合保存实现代码。接口更灵活,所以除非有一个非常好的理由(即你的测试显示你不能承受虚拟方法调用的性能),所以使用一个接口以及一个有意义的抽象基类。
我的一般规则是:使用接口来定义API,并使用抽象基类来允许接口的实现共享代码。
答案 1 :(得分:2)
接口和抽象类用于两个不同的东西 - 接口用于定义合同,而抽象类用于提供基本实现和共享公共代码。因此,您应该始终使用接口,有时(我认为您的情况就是这种情况)也是抽象类,以避免重复代码。
因此,只有界面才能获得以下内容。
class Transformation : INode, ITransformation { }
class GraphicsObject : INode, IGraphicsObject { }
我假设您可以将公共节点特定代码分解为基类。
abstarct class Node : INode { }
class Transformation : Node, ITransformation { }
class GraphicsObject : Node, IGraphicsObject { }
答案 2 :(得分:1)
如果在可以放入抽象类的所有类之间存在公共代码,并且它们都需要与此代码相同的方法集,那么区别就在于此。如果是这种情况,请使用抽象类。如果没有通用代码,或者最终会使代码变得不常见,那么请使用接口。