在我实例化之后,为什么我的C#对象为null? (或者我没有做到这一点?)

时间:2017-01-23 21:19:14

标签: c# instantiation

为什么我的C#对象在实例化之后为null?

我要么不知道如何在C#中实例化一个类,要么就是我在这里缺少2D矩阵的技巧。 (无论哪种方式,我都是新手,并且我限制自己每天在Stack Overflow上提出一个问题,所以使用downvotes轻松一下......)

我的程序是Win8应用程序。

我有一个有三个成员的C#类。他们是:

class CMyClass
    {
        public double[][] matrix1;
        public double[][] matrix2;
        public double[][] matrix3;
    }

我尝试在我的程序中实例化它:

CMyClass myObject = new CMyClass();

然后,如果我尝试访问任何矩阵成员来读取或写入数组,我会得到一个空引用异常错误,表示该对象未实例化。我的课程中缺少什么,或者我尝试实例化对象的方式有问题吗?

5 个答案:

答案 0 :(得分:5)

因为您还没有实例化这些项目。

class CMyClass
{
    public double[][] matrix1;
    public double[][] matrix2;
    public double[][] matrix3;

    public CMyClass()
    {
        matrix1 = new double[][] {};
        matrix2 = new double[][] {};
        matrix3 = new double[][] {};
    }
}

答案 1 :(得分:3)

创建对象的实例会将其成员初始化为其默认值。对于引用类型(如数组),这意味着null。

您需要在对象构造函数中显式创建所需大小的空数组;

matrix1 = new double[4][2];

你也可以把它放在会员的声明中(但这可能很奇怪,因为你可能不知道你想要的尺寸 - 或者你可能会这么做)

答案 2 :(得分:1)

您只是实例化了CMyClass,您还没有实例化该类的任何成员。

尝试向类中添加默认构造函数,并在构造函数中设置成员值。

public CMyClass()
{
    matrix1 = new double[][] {};
    ...
}

答案 3 :(得分:1)

尝试使用微型控制台应用程序。

static void Main(string[] args) {
      CMyClass myObject = new CMyClass();                 
      myObject.matrix1= new double[1][] ;
      myObject.matrix1[0] = new double[1];
      Console.WriteLine(myObject.matrix1[0][0]);     

      }

答案 4 :(得分:0)

谢谢大家。这对我来说似乎是最好的解决方案:

> class CMyClass
> {
>     public double[][] matrix1; 
>         
>     public CMyClass(int x)
>     {
>     matrix1 = new double[x][];

>      for (int i = 0; i < x; i++)
>      { matrix1[i] = new double[x]; }
>     }
> }

然后在程序中:

int matrixSize = 10;
CMyClass MyNewObject = new CMyClass(matrixSize);

现在我可以阅读和写入矩阵的元素 解决了! = d