Во время 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 });
}
}
}
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;
Теперь, чтобы внедрить карту в контроллер (это означает, что она добавлена где-то еще в вашем коде, и один и тот же экземпляр затем может использоваться несколькими классами с использованием аналогичных процедур инъекции), вы должны сделать что-то вроде этого ...
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);
injecting
в контроллере. Я обновлю свой ответ, чтобы показать вам, как это работает.
var map = controller.map;
(при условии, что вы оставили код с map
публично на контроллере)
Похожие вопросы
Новые вопросы
c#
C # (произносится как «резкий») - это высокоуровневый, статически типизированный язык программирования с несколькими парадигмами, разработанный Microsoft. Код C # обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, включая, среди прочего, .NET Framework, .NET Core и Xamarin. Используйте этот тег для вопросов о коде, написанном на C # или в формальной спецификации C #.
map.CellPositions
наблюдаемой коллекцией? Какие-нибудь триггеры срабатывают, когда вы добавляете в него предметы?