C# 为什么我的C对象在实例化后为空?(或者我做得不好?)
为什么我的C对象在实例化后为空 我要么不知道如何在C语言中实例化一个类,要么这里缺少一个关于2D矩阵的技巧。不管怎样,我对这一切都是新手,我限制自己每天只问一个关于堆栈溢出的问题,所以要轻松处理下行投票 我的程序是Win8应用程序 我有一个有三名成员的C班。它们是:C# 为什么我的C对象在实例化后为空?(或者我做得不好?),c#,instantiation,C#,Instantiation,为什么我的C对象在实例化后为空 我要么不知道如何在C语言中实例化一个类,要么这里缺少一个关于2D矩阵的技巧。不管怎样,我对这一切都是新手,我限制自己每天只问一个关于堆栈溢出的问题,所以要轻松处理下行投票 我的程序是Win8应用程序 我有一个有三名成员的C班。它们是: class CMyClass { public double[][] matrix1; public double[][] matrix2; public double[][]
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]?哦,等等,我想我明白了。所以我们把每一个新的双精度数组一个接一个地加到矩阵中?我只是为了简单起见才加上这个 仅使用数组中的一个元素进行测试。如果你有更多,那么你可以一起创造。这是一个很好的参考。