以两种方式访问​​类的属性

时间:2010-08-31 20:18:54

标签: c# class inheritance properties

我坚持创建一个类架构来执行此操作:

我有很多(约78种)类型的块。 游戏的级别由这些块组成。 在级别的ByteArray中,只有数字,表示块的类型。 因此,对于碰撞处理,我可以只检索所需位置的数字并获得该块的属性。 (实心,可选,可见,纹理)。 但。 我将重新排序这个块列表,因此,还需要一种方法来按名称访问块的属性。

所以,我希望能够通过

访问一个块的属性

块[5]的.properties

&安培;

Blocks.Rock.Properties

请注意,这些不是实例,我不应该实例化它们来访问它们的属性。

2 个答案:

答案 0 :(得分:1)

如果你想要Blocks [5] .Properties以及Blocks.Rock.Properties,Blocks必须是带有索引器的自定义类。设置类似于操作:

public Block this[] (int index) 
{
   //getter logic here
}

索引器可以采用整数类型或字符串,因此您可以使用Blocks来包装字典并按键访问值:Blocks["Rock"].Properties。这确实涉及“魔术字符串”,如果拼错,编译器将无法捕获。

命名的getter是简单的只读属性:

public Block Rock { get{//getter logic here} }

如果这是我的应用程序,我会创建一个单例块类。这些块是游戏不可或缺的一部分,在整个生命周期中使用,你不想明确地实例化它们;单例场景的定义(并且更容易更改为常规范围的实例,而不是全部静态)。 Blocks类将包装Block对象的集合,然后该实现隐藏在Blocks访问器后面。您可以使用List并使用Linq搜索其属性(我假设块的属性将包括BlockID及其名称),或者您可以选择块的索引或名称作为Dictionary的键。块。

答案 1 :(得分:0)

由于不同的块类型是整数,因此可以使用map / dictionary / associative数组。

Dictionary<string, int> BlockTypes = new Dictionary<string, int>();
BlockTypes["Rock"] = 1337;