【发布时间】:2014-11-26 12:32:51
【问题描述】:
我有一个包含所有块的枚举:
enum BlockType
{
Grass, Dirt, Stone
}
假设我有一个抽象 Block 类:
abstract class Block
{
public Position position;
public BlockType type;
}
所有的块都像这样继续:
class Grass : Block
{
...
}
我现在可以轻松地检查一个方块是否是草:
if (block.type == BlockType.Grass)
但我也可以这样做:if (block is Grass)
这意味着我不需要那个变量,节省内存。
什么会更好:以枚举方式或类方式识别块?
【问题讨论】:
-
您想用
Grass类型做更多事情吗?我的意思是向它添加特殊方法或属性?如果是这样,您可以从抽象Block类继承。如果您只想识别类型,请使用枚举。 -
老实说,我不明白为什么你甚至需要一个额外的枚举来检查你的对象的类型。
-
记住
class GrassyKnoll : Grass然后GrassyKnoll is Grass -
如果你想使用
switch或if语句来对 Block 的类型进行分支,那么枚举会更有效(或不那么冗长),即使枚举在严格的面向对象意识。 -
您的所有类型的行为是否相同,或者它们仅共享一些共同的行为,同时实现一些不同的行为?