1

defineMapCellPositions() と defineMapCellWalls() の間、map.cols と map.rows は 4 や 5 などの値から 0 に変更されますが、これはメソッドのステップ スルーのみです。デバッガーをステップ実行すると、これが確認されます。どうしてこれなの?

どんな助けでも感謝します、ありがとう!

全体マップクラス

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

public class Map
{
    public Map()
    {
    }
    public int rows { get; set; }
    public int cols { get; set; }
    public int boardXPos { get; set; }
    public int boardYPos { get; set; }
    public int squareSize { get; set; }

    private List<List<int>> m_cellPositions = new List<List<int>>();
    public List<List<int>> cellPositions
    {
        get
        {
            return m_cellPositions;
        }
        set
        {
            m_cellPositions = value;
        }
    }

    private List<List<int>> m_cellWalls = new List<List<int>>();
    public List<List<int>> cellWalls
    {
        get
        {
            return m_cellWalls;
        }
        set
        {
            m_cellWalls = value;
        }
    }
}

MapController クラスの開始

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

public class MapController
{
    public MapController()
    {
    }

    Map map = new Map();

map.cellWalls を設定するメソッド

public void defineCellWallsList()
{
    //map.cellWalls.Clear();
    for (int row = 0; row < (map.rows * map.cols); row++)
    {
        map.cellWalls.Add(new List<int> { 0, 0 });
    }
}

map.cellPositions を設定するメソッド

public void defineCellPositionsList()
{
    //map.cellPositions.Clear();
    for (int row = 0; row < map.rows; row++)
    {
        for (int col = 0; col < map.cols; col++)
        {
            map.cellPositions.Add(new List<int> { col, row });
        }
    }
}
4

1 に答える 1

1

のインスタンスを公開するには、パブリック フィールドにMapするMapControllerか、プロパティに配置します。例:

public class MapController
{
    public MapController()
    {
    }

    //here you make it "public" so it is visible to outside classes
    public Map map = new Map();

    // the rest of your code for this class...

次に、そのインスタンスにアクセスします(コントローラーのインスタンスを保持していると仮定します)

var controller = new MapController();
controller.map.rows = 5; // now you can access that instance of map.
controller.map.rows = 123;

Map をコントローラーに注入するには (つまり、コード内の別の場所で新しく作成され、同様の注入手順を使用して同じインスタンスを複数のクラスで共有できます)、次のようにします...

public class MapController
{
    //here you make it "private" cause it doesn't need to be public anymore, 
    //you also don't new it up here, you are passing in a new on during construction.
    private Map map;
    public MapController(Map map)
    {
        this.map = map
    }

    // the rest of your code for this class...

オブジェクトなどを新たに作成するコードでは...

var map = new Map();
var controller = new MapController(map);
map.rows = 5; // now you can access that instance of map.
map.rows = 123;
// and you can easily share that same instance with other classes
var otherClass = new SomeOtherClassThatNeedsTheMap(map);
于 2013-09-14T08:17:01.657 に答える