Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么我的C对象在实例化后为空?(或者我做得不好?)_C#_Instantiation - Fatal编程技术网

C# 为什么我的C对象在实例化后为空?(或者我做得不好?)

C# 为什么我的C对象在实例化后为空?(或者我做得不好?),c#,instantiation,C#,Instantiation,为什么我的C对象在实例化后为空 我要么不知道如何在C语言中实例化一个类,要么这里缺少一个关于2D矩阵的技巧。不管怎样,我对这一切都是新手,我限制自己每天只问一个关于堆栈溢出的问题,所以要轻松处理下行投票 我的程序是Win8应用程序 我有一个有三名成员的C班。它们是: class CMyClass { public double[][] matrix1; public double[][] matrix2; public double[][]

为什么我的C对象在实例化后为空

我要么不知道如何在C语言中实例化一个类,要么这里缺少一个关于2D矩阵的技巧。不管怎样,我对这一切都是新手,我限制自己每天只问一个关于堆栈溢出的问题,所以要轻松处理下行投票

我的程序是Win8应用程序

我有一个有三名成员的C班。它们是:

class CMyClass
    {
        public double[][] matrix1;
        public double[][] matrix2;
        public double[][] matrix3;
    }
我尝试在我的程序中实例化它,如下所示:

CMyClass myObject = new CMyClass();

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

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

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

matrix1 = new double[4][2];

您也可以将其放在成员声明中,但这很奇怪,因为您可能不知道您想要的大小-或者您确实需要创建对象的实例将其成员初始化为其默认值。对于数组之类的引用类型,这意味着null

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

matrix1 = new double[4][2];

您也可以将其放在成员声明中,但这会很奇怪,因为您可能不知道您想要的大小-或者您不知道,因为您尚未实例化这些项目

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

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

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

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

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

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

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

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

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

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

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

刚刚试用了一款微型控制台应用程序

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]);     

      }

刚刚试用了一款微型控制台应用程序

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]);     

      }

谢谢各位。这似乎是我的最佳工作解决方案:

> 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]; }
>     }
> }
现在我可以读写矩阵的元素了。
解决了=谢谢大家。这似乎是我的最佳工作解决方案:

> 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]; }
>     }
> }
现在我可以读写矩阵的元素了。
解决了=D

您尚未初始化矩阵变量。在CMyClass的构造函数中,您可以为每个矩阵分配null以外的值。我明白了!非常感谢。我应该在类构造函数内还是在主程序范围内执行此操作?另外,这是否意味着我得到的是类成员而不是实际对象的空引用错误?我应该补充一点,在我尝试访问特定元素之前,我在主程序中将矩阵[0][0]初始化为0.0f。我只是没有对矩阵中的每个元素都这样做。@OllieM是的,空引用异常将引用您试图访问的矩阵,而不是myObject本身。您还没有初始化矩阵变量。在CMyClass的构造函数中,您可以为每个矩阵分配空值以外的值。我明白了!非常感谢。我应该在类构造函数内还是在主程序范围内执行此操作?另外,这是否意味着我得到的是类成员而不是实际对象的空引用错误?我应该补充一点,在我尝试访问特定元素之前,我在主程序中将矩阵[0][0]初始化为0.0f。我只是没有对矩阵中的每个元素都这样做。@OllieM是的,空引用异常将引用您试图访问的矩阵,而不是myObject本身。这种语法在我的构造函数中似乎不起作用。当我说矩阵1=newdouble[4][2],“[2]”用红色下划线,建议的弹出窗口显示无效的秩说明符:应为“,”或“]”。此语法在我的构造函数中似乎不起作用。当我说矩阵1=newdouble[4][2],“[2]”用红色下划线,建议弹出的窗口显示无效的排名说明符:应为“,”或“]”。这对我很有用,谢谢!你能解释一下这个语法吗?我不理解创建新双精度的方括号的位置,也就是说,为什么最后第二行在=新双精度[1]之前放[0]?哦,等等,我想我明白了。所以我们把每一个新的双精度数组一个接一个地加到矩阵中?我只是为了便于测试而添加了这个数组,数组中只有一个元素。如果你有更多,那么你可以一起创造。这是一个很好的参考。这对我有用,谢谢!你能解释一下这个语法吗?我不理解创建新双精度的方括号的位置,也就是说,为什么最后第二行在=新双精度[1]之前放[0]?哦,等等,我想我明白了。所以我们把每一个新的双精度数组一个接一个地加到矩阵中?我只是为了简单起见才加上这个 仅使用数组中的一个元素进行测试。如果你有更多,那么你可以一起创造。这是一个很好的参考。