【发布时间】:2009-06-22 01:18:42
【问题描述】:
我正在为 2D 场景图构建代码,并且我有一个抽象类 Node,它将用于指示可以在场景图中使用的项目类型。但是,由此实现的类具有不同的类型,例如叶节点和转换节点。我将如何指出这些差异?我会使用属性、其他接口还是什么?
编辑:看来我提供的信息不足。以下是我可以提供的关于我当前层次结构的尽可能多的信息:
- INode 接口
- 需要一个名为 TransformationMatrix 的矩阵
- 需要一个名为 Children 的 INode 列表
- 需要一个名为 Parent 的节点
- 要求实现一个名为 Draw 的方法,该方法接受一个 Matrix 作为参数并且不返回任何内容
- 节点类
- 实现 INode 接口
- Draw 调用(带有 1 个矩阵类型参数的虚拟 void)只调用每个子 INode 的 Draw 方法。
- 从 Node 派生的各种类
- 这些是实际节点,可以是转换节点、叶节点等。
【问题讨论】:
-
这似乎表明我应该使用属性(我试图指出派生类是什么类型的节点),但我并不完全相信这是最好的选择。
-
节点的类型是关于类机制的事实,还是关于类用于表示什么的事实?
-
关于类被用来表示什么的事实。
-
那么我会避免使用属性。使用属性来描述关于类本身的事实,例如“这个类可以将它的状态序列化到磁盘”,或者“这个类不应该出现在调试器中”。属性告诉您用于实现概念的机制,而不是概念本身。
标签: c# oop scenegraph