从对象数组中的不同类型的对象中获取变量

时间:2014-10-06 13:24:58

标签: c# .net multidimensional-array visual-studio-2013 object-type

所以我在从原始多维对象数组中的某些类获取变量时遇到了这个小问题。

简单说明:

我有一个原始的多维对象数组,我将其用作关卡网格。这个数组填充了不同类型的对象来创建一个级别(墙对象,障碍对象等),这就是我选择使用“对象”类型的原因。

现在所有这些类型的对象都有三个共同的变量:int xpos变量,int ypos变量和SolidBrush br变量。

我现在使用的是相应对象类型的不同列表,以获取其绘制的位置和颜色。现在这是额外的空间代码,我实际上并不需要,因为每个对象都已经在主要的多维数组中。

那么如何循环通过一个对象数组来从这个对象数组中的不同类型的对象类中获取变量。甚至可能因为我正在为我的数组使用全局“对象”类型吗?

这是一个非常简单的问题,但我找不到答案,因为我真的不知道如何为搜索键入正确的关键字。提前谢谢。

编辑:因为使用了界面,所以我得到了它。感谢大家的帮助和意见。我想标记每个界面的答案,但我不能这样,我会标记第一个评论。对不起大家。谢谢大家!

4 个答案:

答案 0 :(得分:3)

创建一个接口和一个实现该接口的对象数组:

// choose a better name and make the properties read-only (get;} if necessary
public interface ILevelItem  
{
    public int XPos {get; set;}
    public int YPos {get; set;}
    public SolidBrush Brush {get; set;}
}

public class Wall : ILevelItem
{
    ....
}

public class Obstacle : ILevelItem
{
    ....
}

现在您的"级别网格"可以是项目数组

public ILevelItem[,] levelGrid;

并且您可以在不进行转换的情况下访问属性:

int x = levelGrid[0,0].XPos;

答案 1 :(得分:2)

创建一个具有三个属性的界面:xpos,ypos和brush。将您放入阵列的所有现有类型都实现此接口。然后将多维数组类型从Object更改为新接口。

答案 2 :(得分:1)

您应该使用界面装饰不同的对象,即IObstacleIWallIMonsterITreasure ...然后您可以轻松测试objetsOfWorld[i]是一个障碍,或一堵墙。

然后你可以访问所需的属性(x,y,画笔)。

如果所有对象共享这些属性,则可能有一个父接口IObjectOfMyWorld公开3个属性。然后你的数组将是IObjectOfMyWorld的数组。

答案 3 :(得分:1)

我认为你不能使用"对象"这里,因为它是您在应用程序中创建的每个对象的类型。您应该使用所有这些属性(xpos等)或接口创建抽象类。然后,使用这些属性的所有其他类应该实现此接口或扩展抽象类。

abstract class YourAbstractClass
{
    public int XPos { get; set; } 
}

class WallObject : YourAbstractClass
{

}

然后你可以拥有一个List<YourAbstractClass>所有物品。

您应该搜索关键字inheritance;)