2014-11-11 3 views
0

У меня возникла проблема со специфическим сценарием. У меня есть приложение, которое будет иметь объект Samples, у которого помимо своих собственных атрибутов есть массив другого типа объекта Ax. Этот тип объекта Ax состоит из N объектов типа Point. Таким образом, образец будет иметь N чисел внутри Ax и каждый Ax будет иметь N число точек (всегда одинаковое количество точек). Классы создаются с их определенными атрибутами, но во время создания экземпляров возникают проблемы. Мне нужен код для динамического создания экземпляра, поскольку количество точек 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 У меня есть этот конструктор общественности Ax [] AxeA;

public Sample(int NAxe) 
    { 
     Axe[] AxeA = new Axe[NAxe]; 

    } 

Для Ax:

public Point[] P; 

    public Axe(int Npoint) 
    { 
     Point[] P = new Point[Npoint]; 

    } 

На ходу я получил ошибку нулевой ссылки: «ссылка на объект не указывает на экземпляр объекта.» на первом новом Торе, который я попытался представить. Что я делаю не так?

+1

Где * точно * является исключением броска? –

+0

Возможный дубликат [Что такое исключение NullReferenceException и как его исправить?] (Http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-and-how-do-i-fix-it) –

ответ

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 
    } 
} 
Смежные вопросы