首页 新闻 会员 周边 捐助

C# 对象的二维数组初始化 为何需要new两次!

0
悬赏园豆:20 [已解决问题] 解决于 2014-11-08 15:31

//错误代码如下   报错:未将对象引用设置到对象的初始化

public class Matrix    

{        

  public int Row;        

  public int Col;        

    public double[,] array;

      public Matrix(int row, int col)        

      {            

    Row = row;            

    Col = col;            

    double[,] array= new double[Row, Col];  //语句(1)     

  }    

}

static void Main(string[] args)        

{            

  Matrix t = new Matrix(2, 3);                

  //t.array= new double[2, 3];  我的改正方法:加上这句               

      for (int a = 0; a < 2; a++)                              

    for (int b = 0; b < 3; b++)                    

      t.array[a,b] = Convert.ToDouble(Console.ReadLine());                  

}    

 

但是我不明白了,对象实例化时不是已经在构造函数里【语句(1)】动态分配数组的空间了吗,为什么在主函数里还需要再对数组重新分配?

の 嚼情的主页 の 嚼情 | 初学一级 | 园豆:184
提问于:2014-11-08 14:04
< >
分享
最佳答案
0

语句(1)中的array是局部变量,虽然和成员变量array同名,但是在构造函数中会覆盖成员变量,构造函数语句块结束后,生命周期就结束了。

你可以将语句(1)写成this.array= new double[Row, Col]; 

收获园豆:20
心梦缘 | 菜鸟二级 |园豆:314 | 2014-11-08 15:18

秒懂。。。

真是个愚蠢的错误。。。白学了一年C#。。。

の 嚼情 | 园豆:184 (初学一级) | 2014-11-08 15:30
其他回答(1)
0

double[,] array = new double[Row, Col];  //语句(1)

改为

array = new double[Row, Col];  //语句(1)
dudu | 园豆:30948 (高人七级) | 2014-11-08 15:20
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册