2016-03-05 100 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....);