C#/ Monogame:从Child类中的Base调用的方法返回null

时间:2017-01-19 11:41:44

标签: c# oop inheritance monogame

我正在尝试在Child类的构造函数中传递来自Base类的数组,但是我觉得在构造函数被调用时可能存在冲突,因为Base类的getFullArray()方法返回空。

基类看起来像这样:

    protected Byte[,] _byteTileArray; //is going to be implemented in child class
    private Object[,] objectTileArray;

    public Level_Manager(ContentManager content)
    {
        CreateTileArray();

        objectTileArray = new Object[_byteTileArray.GetLength(0), _byteTileArray.GetLength(1)];

        CreateWorld(content);
    }

    protected abstract void CreateTileArray();

    private void CreateWorld(ContentManager content)
    {
        for(int row = 0; row < _byteTileArray.GetLength(0); row++)
        {
            for (int col = 0; col < _byteTileArray.GetLength(1); col++)
            {
                switch (_byteTileArray[row,col]) 
                {
                    case 0: objectTileArray[row, col] = null; break;
                    case 1: objectTileArray[row, col] = new Cube(new Vector2(col * (852/12), row * (480/7)), content, 124, 33, new Vector2(0, 0)); break;
                    case 2: objectTileArray[row, col] = new Ladder(new Vector2(col * (852 / 12), row * (480 / 7)-33), content, 50, 107, new Vector2(0, 0)); break;
                }
            }
        }
    }

    public Object[,] getFullArray(){

        return objectTileArray;
   }

我需要getFullArray()

中的objectTileArray

这是Child类构造函数:

private Object[,] arrayObjects;
    #endregion

    public Level1(ContentManager content, GraphicsDevice device) : base(content)
    {
        this.content = content;

        arrayObjects = getFullArray();

        hero = new Hero(new Vector2(1, device.Viewport.Height-40), this.content, arrayObjects);
    }

arrayObjects在这里为空。

1 个答案:

答案 0 :(得分:0)

编辑: 显然我误解了调试,我的arrayObjects不是null,但里面的元素是。

    protected override void CreateTileArray()
    {
        base._byteTileArray = new Byte[,]
        {
            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
            {1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0},
            {0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0},
            {1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0},
            {0, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1},
            {1, 1, 0, 2, 1, 0, 1, 1, 1, 1, 1, 2},
            {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}
        };
    }

这是我传递给Parent类的byteTileArray,它在0&#39; s(故意)上插入null但是这在另一部分给了我一个NullReferenceException,它只是通过添加if not null子句来修复。 谢谢大家,对不起!