Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 枚举或类名作为标识符_C#_Class_Enums - Fatal编程技术网

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意义上是冗余的。您的所有类型的行为是否相同,或者它们是否只共享一些常见的行为,同时也实现了一些不同的行为?我从来没有想过这种方式。你不需要知道它是什么块,块本身就知道它!