約定 //一個典型的用C#寫就的HelloWorld程序 我忘記自己第一次用C#向世界問好是在什么時候了,不過可以肯定我已經打過招呼了,那時候用的是beta1版。現在你可以到http://msdn.microsoft.com/downloads/default.asp?url=/downloads/sample.asp?url=/msdn-files/027/000/976/msdncompositedoc.xml去下載.Net Framework Software Development Kit (SDK)的正式版,其中包括了前面提到的.NET Framework, 以及書寫、編譯、測試、開發 .NET Framework 應用程序所需要的一切——文檔、例子、命令行工具和編譯器。安裝之后就可以開發和運行C#程序了,不過一般的建議是:一定要看.Net Framework SDK中所帶的文檔與例子,如果能照著例子再寫一遍那就再好不過了。 Hello World ! 這就是第一個C#的程序,我們使用csc.exe來編譯它,對于這個C#編譯器,有如下說明: C#編譯器(csc.exe)編譯后的文件并不是一個嚴格意義上的可執行文件(并不包含機器代碼),而是一個PE(portable executable)格式的文件,雖然它同樣擁有.exe的后綴名。在這個PE文件中也不僅僅只包含中間語言,在其中還包含有元數據(Metadata)和一個由編譯器添加的目標平臺的標準可執行文件頭。 中間語言,確切地說,應該稱為微軟中間語言(Microsoft Intermediate Language,MSIL),是由微軟定義的一種界于源代碼與機器碼之間的一種語言。在CLR中,它首先會由特定的語言編譯器將其包裝成exe格式的偽代碼(P代碼)。再由特定的編譯器將其轉換為本地代碼執行。對于微軟中間語言,一個形象的比喻是:如果CLR是操作系統的話,那么微軟中間語言就是.Net平臺上的ASM匯編語言。它比大多數 CPU 機器語言更為高級,比如它可以理解對象類型,并具有創建和初始化對象、調用關于對象的虛擬方法以及直接操作處理數組元素的指令。它甚至還具有發現和捕獲異常情況用于錯誤處理的指令。 元數據(Metadata)和MSIL共同存在于編譯好的程序文件之中,描述了此程序包含的類型的定義、各種類型的簽名及其它一些數據,相當于以前的類型庫(Type Library),同時也記載了此程序所引用到的其它外部類。元數據的主要作用是將與代碼有關的更多的信息提供給CLR。基本上,元數據用于如下各項任務:用于表示CLR用途的信息,如定位和裝載類、內存中這些類的實例、解決調用、翻譯IL為原始碼、加強安全并設置運行時上下文邊界。 一個由C#語言寫就的源碼文件在CLR環境中執行的過程是這樣的:首先由C#編譯器編譯成包含了中間語言和元數據的PE文件,當我們在系統中調用這個文件時,CLR會啟動一個編譯器再將這個PE文件包含的MSIL代碼轉換成為托管的本地代碼。轉換MSIL代碼為本地碼的這個編譯器就叫做JIT編譯器(Just In Time,JITer)。請注意它并不是前面我們用到的C#編譯器。 這就是一個C#程序執行時的步驟。整個過程是這樣的: 不必全部理解這些概念,在以后的學習中將會一一的體會到它們的精彩,現在你需要做的(如果你還沒這么干過的話),是找到ildasm.exe這個文件(一般情況下,它會和csc.exe在同一文件夾中)。顧名思義,這是一個MSIL的反匯編程序(.Net Framework IL Disassembler),在命令行窗口下輸入ildasm helloworld.exe /out=helloworld.il就會得到兩個文件:helloworld.il和helloworld.res。前者包括了反編譯出來的元數據和MSIL代碼,后者則是提取的資源文件。用記事本打開helloworld.il文件,可以看到它定義并實現了一個繼承自System.Object 的HelloWorld類及兩個函數:Main()和.ctor()。其中.ctor()是HelloWorld類的構造函數。在這個文件中還包括元數據和其它有關的信息。如果你覺得這樣不夠直觀的話,可以在命令行窗口鍵入ildasm helloworld.exe,這樣就可以啟動ILDASM 窗口并向我們展示出反編譯后的helloworld.exe文件。 請仔細將這些代碼看上幾遍,現在理解全部這些內容并不重要,但是希望你也能看一下文件中的元數據,這其中包含所有 Runtime 和編譯器需要的有關程序集及其模塊、類型和成員(如方法)的信息。 行文至此,我想談一下學習。如你所知,在我們所處的環境中,學習總意味著是一個痛苦的過程,學習一種新知識好像總是為了自己的某種需求,我并不認為這樣有什么不對,但我總覺著,除了拿到高薪和受人尊敬外,學習還應該帶給我們更多的快樂。有些知識我們現在也許用不著,比如前面談到的一些內容,但是我們了解了,就是一件值得高興的事。 智慧本身就是好的,有一天我們都會死去,追求智慧的道路還會有人在走著。死掉以后的事我看不到。但在我活著的時候,想到這件事,心里就高興。 ——王小波 今天是2002年4月7號,再過三天就是王小波的忌日了,不知道有多少人還會記得這個日子,還會記得這個人。本文的最后,我向大家推薦小波的作品——每一個心智成熟的人都應該讀一讀小波的文字。在他的雜文隨筆集《沉默的大多數》中有一句話談到了他作為程序員的一面:
|
溫馨提示:喜歡本站的話,請收藏一下本站!