如何声明包含其他对象的对象

时间:2014-11-11 18:33:48

标签: c# asp.net class oop object

我遇到了特定情况的问题。我有一个应用程序,它将有一个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上。我做错了什么?

1 个答案:

答案 0 :(得分:0)

您在构造函数中声明了AxeAP变量的新本地实例,而不是将值分配给父属性。而不是:

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
    }
}