C# 枚举或类名作为标识符
我有一个包含以下所有块的枚举:C# 枚举或类名作为标识符,c#,class,enums,C#,Class,Enums,我有一个包含以下所有块的枚举: enum BlockType { Grass, Dirt, Stone } 假设我有一个抽象的块类: abstract class Block { public Position position; public BlockType type; } 所有的块都是这样继续的: class Grass : Block { ... } 我现在可以轻松地检查一个街区是否为草地: if(block.type==BlockType.Grass)
enum BlockType
{
Grass, Dirt, Stone
}
假设我有一个抽象的块
类:
abstract class Block
{
public Position position;
public BlockType type;
}
所有的块都是这样继续的:
class Grass : Block
{
...
}
我现在可以轻松地检查一个街区是否为草地:
if(block.type==BlockType.Grass)
但我也可以这样做:如果(块是草)
这意味着我不需要那个变量,节省内存
更好的方法是:用枚举方式还是类方式识别块?最好的方法是永远不要从外部知道块的类型。假设你想把草块画成绿色,石头块画成灰色。您可以从块请求类型,然后根据类型确定颜色,但最好调用
block.getColor
,甚至block.draw
。显然,块本身知道它是什么,因此它可以返回正确的颜色或以正确的颜色绘制自身
除此之外,使用类名肯定比使用枚举要好。我会处理掉整个枚举。然后,如果要添加类,则不必同时更新枚举。是否要对
Grass
类型执行更多操作?我的意思是添加特殊的方法或属性?如果是这样,您可以从抽象块
类继承。如果您只想识别类型,那么就使用enum。老实说,我不明白为什么您甚至需要一个额外的enum来检查对象的类型。请记住,对于类grassyknol:Grass
那么grassyknol是Grass
如果您想使用开关
或If
语句来对类型进行分支对于块,则枚举更有效(或更不详细),即使枚举在严格的OO意义上是冗余的。您的所有类型的行为是否相同,或者它们是否只共享一些常见的行为,同时也实现了一些不同的行为?我从来没有想过这种方式。你不需要知道它是什么块,块本身就知道它!