2016-07-11 2 views
0

Ich habe eine Klasse wie dieseimmer Überlaufausnahme während intiliazing in C# Konstruktor

public class Menu 
    { 
     public int MenuID { get; set; } 
     public string MenuName { get; set; } 
     public string LinkAddress { get; set; } 
     public Menu[] menu; 
} 

, während ich im Konstruktor intilize versuchen wie ich Fehler erhalte eine Überlaufausnahme folgt

public Menu() { 
      Menu[] menu = { 
           new Menu { MenuID = 1, MenuName = "Home", LinkAddress = "home/index" } 
           , new Menu { MenuID = 2, MenuName = "Gallery", LinkAddress = "Gallery/index" } 
           , new Menu { MenuID = 3, MenuName = "Academics", LinkAddress = "Academics/index" } 
           , new Menu { MenuID = 4, MenuName = "Blog", LinkAddress = "Blog/index" } 
           , new Menu { MenuID = 5, MenuName = "Login", LinkAddress = "Login/index" } 
           , new Menu { MenuID = 6, MenuName = "UserLogin", LinkAddress = "UserLogin/index" } 
           , new Menu { MenuID = 7, MenuName = "ForgotPassword", LinkAddress = "ForgotPassword/index" } 
          }; 
     } 

i auch myvariable

public Menu[] menu; 

im Konstruktor zu initialisieren versucht, aber ich war nicht in der Lage i intialize t. Kann mir jemand sagen, was genau mache ich falsch? Ich dachte, Konstruktor wird verwendet, um Variablen zu initialisieren, aber ich bin nicht in der Lage, es zu integrieren. danke für Ihre Hilfe.

+0

StackOverflowException! = OverflowException. Ihr Standardkonstruktor erstellt Menüelemente mit dem Standardkonstruktor. Welche erstellt Menüelemente mit dem Standardkonstruktor. Welche erstellt Menüelemente mit dem Standardkonstruktor. Welche erstellt Menüelemente mit dem Standardkonstruktor. Welche erstellt Menüelemente mit dem Standardkonstruktor. Welche erstellt Menüpunkte mit dem Standardkonstruktor .... Kaboom! Beachten Sie, dass Sie * zwei * Klassen, eine Menü- und eine MenuItem-Klasse benötigen. –

Antwort

1

man einen kreisförmigen Bezug genommen werden, wenn innerhalb der Klasse ein Array von einer Klasse erklärt:

public Menu[] menu;//<-- declaring inside Menu class produces circular refernce 

somit eine Überlaufausnahme

ein Verfahren verwenden, statt, zum Beispiel:

public void InitMenu() 
     { 
      this.menu = new Menu[]{ 
           new Menu { MenuID = 1, MenuName = "Home", LinkAddress = "home/index" } 
           , new Menu { MenuID = 2, MenuName = "Gallery", LinkAddress = "Gallery/index" } 
           , new Menu { MenuID = 3, MenuName = "Academics", LinkAddress = "Academics/index" } 
           , new Menu { MenuID = 4, MenuName = "Blog", LinkAddress = "Blog/index" } 
           , new Menu { MenuID = 5, MenuName = "Login", LinkAddress = "Login/index" } 
           , new Menu { MenuID = 6, MenuName = "UserLogin", LinkAddress = "UserLogin/index" } 
           , new Menu { MenuID = 7, MenuName = "ForgotPassword", LinkAddress = "ForgotPassword/index" } 
          }; 
     } 

und konsumieren als:

Menu m = new Menu(); 
      m.InitMenu(); 
      m.menu=..;//<--acces your array 
+0

Nun, ich möchte öffentliche Menu [] Menüvariable, wie kann ich das tun –

+0

deklarieren es in der Klasse, die es konsumiert – apomene

+0

gibt es keine Möglichkeit, wo ich ein Intilize die Variable, während ich ein Objekt der Menü-Klasse erstellen ... Danke –