1. 程式人生 > >[C#]控制檯程式靜態main函式淺談

[C#]控制檯程式靜態main函式淺談

眾所周知,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~~有實力了自己寫一個~~