【问题标题】:enum or class name as identifier枚举或类名作为标识符
【发布时间】: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
  • 如果你想使用 switchif 语句来对 Block 的类型进行分支,那么枚举会更有效(或不那么冗长),即使枚举在严格的面向对象意识。
  • 您的所有类型的行为是否相同,或者它们仅共享一些共同的行为,同时实现一些不同的行为?

标签: c# class enums


【解决方案1】:

最好的办法是永远不从外面知道方块的类型。假设您要绘制绿色的草块和灰色的石块。您可以从块中请求类型,然后根据类型确定颜色,但最好调用block.getColor,甚至是block.draw。显然,块本身知道它是什么,因此它可以返回正确的颜色或以正确的颜色绘制自己。

除此之外,使用类名肯定比使用枚举好。我会处理整个枚举。然后,如果你想添加一个类,你不必同时更新枚举。

【讨论】:

  • 我从来没有这样想过。你不需要知道它是什么块,块本身就知道!
猜你喜欢
  • 2015-08-06
  • 1970-01-01
  • 1970-01-01
  • 2013-09-19
  • 2012-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多