《.net編程先鋒C#》第三章 第一個C#應用程式(轉)

來源:互聯網
上載者:User
編程|程式 第三章 第一個C#應用程式
3.0 選擇一個編輯器
儘管我是一個頑固的Notepad狂,但這次我不建議用它編輯源碼。原因是你正在與真正的程式設計語言打交道,使用Notepad編輯源碼編譯時間可能產生大量的錯誤資訊行(C++程式員知道我在說什麼。)
你有幾種選擇。可以重新設定你信任的老式Visual C++ 6.0,使它能夠和C#源檔案一起工作。第二種選擇是使用新的Visual Studio 7。第三,你可以用任何第三方程式編輯器,最好要支援行數、色彩編碼、工具整合和良好的搜尋功能。CodeWright就是其中一個例子,如圖3.1所示。

圖3.1 CodeWright 是你可以用於建立C#代碼檔案眾多可能編輯器中的一個。

當然,在所提到的編輯器中,沒有一個對建立C#程式來說是必要的。用Notepad肯定可以編輯。但是,如果你考慮到要編寫更大的項目,最好還是忍痛割愛吧。

3.1 "Hello World" 代碼
討論編輯器有點離題 ,讓我們把話題轉回到一個非常出名的小應用程式。這個最短的C#版本應用程式見清單3.1。把它存起來,檔案名稱為 helloworld.cs,以便使你能按照說明,完成諸如編譯應用程式等其它餘下來的步驟。

清單 3.1 最簡單的 "Hello World "程式

1: class HelloWorld
2: {
3: public static void Main()
4: {
5: System.Console.WriteLine("Hello World");
6: }
7: }

在C#中,代碼塊(語句組)由大括弧({和})所括住。所以,甚至你以前沒有C++的經驗,你也可以說出Main()方法就是HelloWorld 類語句的一部分,因為類被括在所定義的大括弧中。
C#應用程式(可執行)的進入點就是 static Main 方法,它必須包含在一個類中。僅有一個類能使用該標誌定義,除非你告訴編譯器它應使用哪一個 Main 方法(否側,會產生一個編譯錯誤)。
和C++相比,Main的第一個字母是大寫的M,而不是你曾經使用過的小寫字母。在這個方法中,你的程式開始並結束。方法中可以調用其它方法——如這個例子中,用於輸出文本——或者建立對象並啟用該方法。
正如你所看到的,Main方法返回一個void類型。
public static void Main()
儘管看到這些語句時,C++程式員肯定會覺得似曾相識,但是其他程式員並不如此。首先,public 的訪問標誌告訴我們這個方法可以被任何程式訪問,這是它被調用的必要條件。其次,static 意味著沒有先建立類的執行個體也可以調用方法——你所要做的就是用類名調用方法。
HelloWorld.Main();
但是,我不贊成在Main方法中執行這行代碼,遞迴會導致堆疊溢位。
另一重要的方面是傳回型別。對於方法Main,可選擇void (意味著根本就沒有傳回值),或用int 為整型結果(應用程式返回的錯誤層級)。因此,兩種可能的Main方法為:
public static void Main()
public static int Main()

C++程式員會同樣知道後面我要提到的——可以傳給應用程式的命令列參數數組。如:
public static void Main(string[] args)

我現在並不想詳細地說明如何訪問參數,但我想事先給C++程式員一個警告:和C++相比,應用程式路徑不是這個數組的一部分。僅僅那些參數包含在這個數組中。
在對Main方法並不簡短的介紹之後,讓我們把注意力集中到唯一真正的程式碼——這行代碼在螢幕上顯示"Hello Wold"。
System.Console.WriteLine("Hello World");
假如不是由於有了System,大家會馬上猜到WriteLine是Console 對象的一個靜態方法。那麼System代表什麼呢? 它是包含Console對象的名字空間(範圍),實際上並不是每次都在Console對象前加上名字空間的首碼,你可以象清單3.2所示範的那樣,在應用程式中引入名字空間。

清單3.2 在應用程式中引入名字空間
1: using System;
2:
3: class HelloWorld
4: {
5: public static void Main()
6: {
7: Console.WriteLine("Hello World");
8: }
9: }

所有你要做的就是給System名字空間加一個using指令。在這之後,不再需要規定名字空間,就可以使用它們的方法和屬性了。NGWS 架構體系中有很多的名字空間,我只對巨大的名字空間池中的少數幾個對象進行探討。但在第八章 "用C#寫組件"將介紹為你的對象建立自己的名字空間。

3.2 編譯應用程式
由於NGWS Runtime支援所有的編譯器(VB、C++和C#),你不必買一個單獨的開發工具用來把應用程式編譯成IL(中繼語言)。但是,如果你從沒有用過命令列編譯器編譯過應用程式(僅懂得編譯名,而沒有熟記), 它還是你的首要選擇。
開啟命令提示字元並切換到存 helloworld.cs 的目錄。敲入以下命令:
csc helloworld.cs

helloworld.cs 被編譯並連結成hellworld.exe。因為源碼沒有錯誤(那當然!),C#編譯器沒有出錯提示,在整個編譯過程沒有絲毫停頓。如圖3.2所示。

圖3.2 使用命令列編譯器 csc.exe 編譯應用程式

現在你已經準備好運行第一個真正用C#編寫的應用程式。簡單地在命令列上敲入helloworld,輸出結果為 "Hello World"。
在繼續往下介紹之前, 我想稍為想象一下第一個應用程式和一個編譯器開關的使用:
csc /out:hello.exe helloworld.cs
這個開關告訴編譯器輸出檔案命名為hello.exe。雖然這不是什麼絕招,但它是這本書中用到的未來編譯器的基本功。
3.3 輸入和輸出
到目前為止,我僅僅示範了把簡單的常量字串輸出到螢幕。儘管這本書只介紹了C#編程的概念而不介紹使用者介面編程,但我需要讓你迅速學會簡單的螢幕輸入和輸出方法——相應於C的scanf 和 printf,或者C++的cin 和cout。我不能提供VB相應的函數,因為螢幕訪問不是該核心語言的一部分。
你只需要能夠讀使用者的輸入並提示一些資訊給使用者。清單3.3 說明如何讀一個使用者請求的名字輸入,並顯示一條已定製好的"Hello" 資訊。

Listing 3.3 從控制台讀輸入資訊

1: using System;
2:
3: class InputOutput
4: {
5: public static void Main()
6: {
7: Console.Write("Please enter your name: ");
8: string strName = Console.ReadLine();
9: Console.WriteLine("Hello " + strName);
10: }
11: }

第7行使用Console對象的一個新方法用於提示文本資訊給使用者,它就是Write方法。它與WriteLine不同的地方在於它輸出時不換行。我使用這種方法以便使用者可以在資訊提示的同一行輸入名字。
在使用者輸入他的名字後(並按斷行符號鍵),ReadLine 方法讀入了一個字串變數。名字字串串連到常量字串"Hello",並用我們早已熟悉的WriteLine方法顯示出來(見圖3.2)。

圖3.3 編譯和運行定製的Hello 應用程式

你幾乎已學完了NGWS架構必要的輸入和輸出功能。但是,你還需要為使用者顯示多個值。為使用者寫一個格式串。清單3.4展示一個例子。

清單 3.4 使用不同的輸出方法

1: using System;
2:
3: class InputOutput
4: {
5: public static void Main()
6: {
7: Console.Write("Please enter your name: ");
8: string strName = Console.ReadLine();
9: Console.WriteLine("Hello {0}",strName);
10: }
11: }

第9行包含了使用格式串的Console.WriteLine語句。格式串例子如下:
"Hello {0}"
{0}代替WriteLine方法的參數表中緊隨格式串後的第一個變數。你可以用該技術格式化超過三個變數。
Console.WriteLine("Hello {0} {1}, from {2}",
strFirstname, strLastname, strCity);

當然,並不僅限於只使用字串變數。你可以使用任何類型,這些類型在後面的第四章 "C#類型"中有討論。

3.4 添加註釋
當寫代碼時,你應為代碼寫注釋條文,解釋實現的內容、變更史等。儘管你注釋中提供的資訊(如果有的話)是給你寫的,但是你還是必須遵守寫C#注釋的方法。清單3.5 顯示採用的兩種不同的方式。

清單3.5 給你的代碼添加註釋

1: using System;
2:
3: class HelloWorld
4: {
5: public static void Main()
6: {
7: // 這是單行注釋
8: /* 這種注釋
9: 跨越多行 */
10: Console.WriteLine(/*"Hello World"*/);
11: }
12: }

"//" 符號用於單行注釋。你可以用"//"注釋當前所在行,或是跟在一個代碼語句的後面:
int nMyVar = 10; // 胡說八道
所有在"//"後面的被認為是一條注釋;所以,你可以同樣用它們來注釋一整行或一行原始碼的部分。這種注釋方式同C++中介紹的相似。
如果你的注釋跨越多行,必須使用"/* */"的字元組合。這種方式在C中有效。除了單行注釋外,這種方式在C++和C#中還同樣有效。因C/C++和C#都使用這種多行注釋方式,所以它們也使用相同的終結符。請看下列程式碼:
/* Console.WriteLine("Hello World"); */

我使用"/* */"簡單地注釋一整行。現在我假定這一行是很長代碼的一部分,而且我決定要暫時禁用一個程式塊:
/*
...
/* Console.WriteLine("Hello World"); */
...
*/

這個結構所存在的問題為: "Hello World"那一行後面的"*/"終止了始於第一行的"/*"的注釋,餘下的代碼對編譯器有效,你將看到一些有趣的出錯資訊。至少 最後的"*/"被標誌為歸屬錯誤。我只不過想提醒一下,讓你瞭解這種錯誤。

3.5小結
在這一章中,你建立、編譯並執行了第一個C#應用程式:著名的"Hello World"程式。我用這個短短的應用程式給你介紹有關Main方法,它是一個應用程式的進入點,也是出口點。這個方法可以沒有傳回值或返回一個整數錯誤層級。如果你的應用程式用參數調用,你可以(但不必要)讀出並使用它們。
在編譯和測試應用程式後,你學到了更多的由Console對象提供的有關輸入和輸出的方法。對於學習C#而言,它們足以建立出有意義的控制台例子,但使用者介面的大部分將是WFC、WinForms或者ASP+。

相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。