Idg*_*rad 1 c# scope class multidimensional-array
这可能是一个范围问题,但以下代码已经死亡.我从2个类,Cell和Map构建了一个多维数组.地图是一个X×Y大小的单元格网格.到目前为止很正常(当我学习一门新语言时,我会继续重写这个相同的程序).为简洁起见,我将发布类和一个反映错误的基本测试.当我去打印地图时,我在打印机期间初始化的整个网格阵列在我打印时消失了(空格异常,因为网格最终空了一些如何......)
//misc using up here
namespace Mapper {
class Program {
static void Main(string[] args)
{ //TODO Parser
int max_x=2;
int max_y=2;
Map myMap = new Map(max_x,max_y);
myMap.print();
}
class Cell
{
public char type='o';
public Cell(char inittype){
this.type=inittype;
}
public void printCell(){
Console.Write(this.type); }
public void set(char value){
this.type = value; }
}
class Map
{
private int max_X; //global
private int max_Y; //global
public Cell[,] grid; //global
public Map(int maxX, int maxY) {
Cell[,] grid = new Cell[maxX, MaxY];
this.max_X = maxX; //Store constructor provided dimensions for global use
this.max_Y = maxY;
for(int yv=0; yv < max_Y; yv++){
for(int xv=0, xv < max_X;xv++){
grid[xv,yx] = new Cell('x');
}
}
public void print() {
for(int yv=0; yv < max_Y; yv++){
for(int xv=0, xv < max_X;xv++){
grid[xv,yx].printCell();
}
}
}}
Run Code Online (Sandbox Code Playgroud)
运行跟踪一切看起来都很好,直到Map myMap行完成...换句话说,似乎构造函数没有"坚持",最后我得到一个空网格(它们都变为空.)我只能假设它是在某种程度上是一个范围问题......我错过了什么......?我把构造函数搞砸了吗?
问题出在这里:
public Cell[,] grid; //global
public Map(int maxX, int maxY) {
Cell[,] grid = new Cell[maxX, MaxY];
...
Run Code Online (Sandbox Code Playgroud)
您已经声明了一个名为grid的实例成员和一个名为grid 的局部变量,但您只是更新了局部变量.
要解决此问题,请将上面提到的最后一行更改为:
grid = new Cell[maxX, maxY];
Run Code Online (Sandbox Code Playgroud)
您的代码中也存在大量编译错误 - 问题中的代码可能不是您正在运行的代码.下次请使用复制和粘贴将代码复制到问题中.
该评论//global也具有误导性.实例成员不是全局变量.与C#中的全局变量最接近的等价物是静态成员.