2016-03-05 106 views
-1

我做了一個控制檯應用程序,並且我試圖從Program類調​​用類Template的主類。在Program類我有這樣的菜單開關:不能在其他類中調用main

int menu = 0; 
while (menu != 7) 
     { 
      select = int.Parse(Console.ReadLine()); 

      switch (select) 
      { 
       case 1: 
        new Template(); 
        break; 
       default: 
        Console.WriteLine("Bad choice!"); 
        break; 
      } 
     } 

這是類Template();

static void main(string[] args) 
{ 
     Console.WriteLine("Template"); 
     new Template().menu(); 
} 

public void menu() 
{ 
    Console.WriteLine("Menu Template opened!"); 
} 

的問題是主要的Template不叫,我也試圖把線路new Template().menu();上的斷點但未被觸發。我究竟做錯了什麼?

回答

2

實例化Template類不會自動執行main功能。實際上,只調用一個函數「main」並不會給它任何特殊的語義。

首先,您需要讓main可以從課外訪問。你通過公開這樣做。

public static void main(string[] args) 
{ 
    Console.WriteLine("Template"); 
    new Template().menu(); 
} 

然後,在你switch語句,你可以使用類名,而不是創建一個新的實例調用這個靜態方法。

switch (select) 
{ 
    case 1: 
     Template.main(null); 
     break; 
    default: 
     Console.WriteLine("Bad choice!"); 
     break; 
} 
+0

你說得對,現在工作很好。感謝提示:) –

+0

只是一個問題:如果我想要例如返回到主菜單?那麼在模板的Program類的菜單中?我怎麼能這樣做? –

+0

@SevengamesXoom我不太清楚你的意思,你可以更詳細地解釋它嗎? – Domysee

0

當您觸摸靜態類時,只會自動調用靜態構造函數。你必須手動調用你的main()。

您只是在交換機中創建Template類的實例。

你的主要方法是靜態的,它與實例沒有任何關係。

在你的交換機,你不得不這樣稱呼它

Template.main(param1,param2....);