我遇到了特定情况的问题。我有一个应用程序,它将有一个Samples对象,除了它自己的属性外,还有另一个对象类型Ax的数组。此对象类型Ax由N个Point类型的对象组成。因此,Sample将在内部具有N个Ax,并且每个Ax将具有N个Point(总是相同的点数)。类具有某些属性,但在实例化时遇到问题。我需要动态实例化代码,因为Ax和Point的数量可能会有所不同。
目前我有这段代码:
const int SampleSize = 6;
const int AxeSize = 6;
Sample Samp = new Sample(SampleSize);
for (int i = 0; i < SampleSize; i++)
{
Samp.AxeA[i] = new Axe(AxeSize);
}
for (int i = 0; i < AxeSize; i++)
{
DevExpress.Web.ASPxTabControl.TabPage PaG = new DevExpress.Web.ASPxTabControl.TabPage { Text = "Aba " + i };
ASPxPageControl1.Page.Items.Add(i, PaG);
for (int j = 0; j < AxeSize; j++)
{
Table X = new Table { CssClass = "datatable" };
TableRow Rw = new TableRow();
Label L = new Label { Text = "Linha" + j };
Rw.Controls.Add(L);
X.Rows.Add(Rw);
PaG.Controls.Add(X);
}
}
对于类Sample,我有这个构造函数 public Axe [] AxeA;
public Sample(int NAxe)
{
Axe[] AxeA = new Axe[NAxe];
}
对于Ax:
public Point[] P;
public Axe(int Npoint)
{
Point[] P = new Point[Npoint];
}
运行时出现空引用错误:“对象引用未设置为对象实例。”在我尝试实例的第一个新Ax上。我做错了什么?
答案 0 :(得分:0)
您在构造函数中声明了AxeA
和P
变量的新本地实例,而不是将值分配给父属性。而不是:
public class Sample {
public Axe[] AxeA;
public Sample(int nAxe){
Axe[] AxeA = new Axe[nAxe]; // declaring a new local variable named AxeA which hides the parent scope variable
}
}
你应该这样做:
public class Sample {
public Axe[] AxeA;
public Sample(int nAxe){
AxeA = new Axe[nAxe]; // assigning to parent scope instead of declaring new variable
}
}
同样适合您的Axe
课程:
public class Axe {
public Point[] P;
public Axe(int nPoint)
{
P = new Point[nPoint]; // likewise
}
}