[C#]控制檯程式靜態main函式淺談
阿新 • • 發佈:2019-02-05
眾所周知,c#中控制檯應用程式中Main函式為靜態函式,那為什麼不能是非靜態函式呢?
分析如下:
C#控制檯中,如果Main是非靜態函式,那麼在呼叫的時候就需要進行例項化才能被呼叫,而系統在呼叫的時候是直接呼叫的Main函式,所以要宣告成靜態函式。
那可不可以通過過載Main函式,在靜態Main函式中呼叫非靜態的Main函式?
實驗如下:
首先想到怎麼過載,首先把Main的形參去掉
static void Main()
編譯通過
如果直接把形參改掉
static void Main(int[] args)
編譯失敗,沒有找到簽名,也就是說編譯器找不到特定的Main函式宣告,失敗。
仔細想了想,以下程式碼編譯通過,過載Main函式,但是入口Main函式還是靜態的
namespace ConsoleApplication1 { class Program3 { static int Main() { Program3 mya=new Program3(); mya.Main(1); return 0; } int Main(int jjj) { Decimal[] myarr = new Decimal[40]; for (int i = 0; i < 40; i++) { try { Console.Write("請輸入學號為[{0}]學生的成績:",i+1); Decimal temp = Convert.ToDecimal(Console.ReadLine()); if (temp <= 100 && temp >= 0) { myarr[i] = temp; } else if (temp==-1) { return 0; } else { Console.WriteLine("==========\n輸入錯誤,請重新輸入![輸入\"-1\"退出]\n"); i = i - 1; } } catch (Exception ex) { Console.WriteLine("==========\n輸入錯誤,請重新輸入![輸入\"-1\"退出]\n"); i = i - 1; } } return 0; } } }
通過此程式碼所想到的一個問題:是否浪費記憶體?
分析如下:
系統再呼叫控制檯應用程式的時候已經例項化了,但是在程式碼裡又例項化了他本身,就是說他本身又例項化了一個自己,造成了記憶體的浪費。
想解決的問題:怎麼能夠完全擺脫控制檯靜態Main函式。(PS:估計要自己編譯器才能實現吧。。。)
PS2:剛剛那個想起來先記上,老師推薦了本書,叫自己動手寫編譯器,裡邊全是關於正則表示式的,有空研究研究。
PS3:聽說.NET是做delphi的人做的,而且聽說好多語言都是他寫的,崇拜ing~~有實力了自己寫一個~~