c#語言,net平臺的編程語言,如何編寫第一個c#應用程序呢?菜鳥學習難。 開始吧(let's start) 第一個程序老是很是簡單的。咱們讓用戶經過鍵盤輸入本身的名字,而後程序在屏幕上打印出一條歡迎信息。程序的代碼是這樣的:程序員
新建窗體,輸入程序清單: using System;編程
class Welcomec#
{ static void Main(){ Console.WriteLine("Please enter your name:"); Console.ReadLine(); Console.WriteLine("Welcome to you!"); } }您能夠在任意一種編輯軟件中完成上述代碼的編寫,而後把文件存盤,文件名叫作Welcome.cs。典型的C#源文件一般都是以「.cs」做爲文件的擴展名。安全
3.2 代碼分析框架
首先要提出的是,C#語言是大小寫敏感的。這一點對於C和C++程序員沒什麼問題,只是要提醒一下VB和Delphi程序員。編程語言
接下來讓我爲您逐條分析上面的C#程序語句。學習
3.2.1 名字空間優化
using System表示導入名字空間。高級語言老是依賴於許多系統預約義的元素。若是您是C或C++程序員,那麼您必定對使用#inclued之類的語句來導入其它C或C++源文件再熟悉不過了。C#中的含義與些相似,用於導入預約義的元素,這樣在本身的程序中就能夠自由地使用這些元素。命令行
若是沒有導入名字空間的話,咱們該怎麼辦呢,程序還能保持正確嗎?答案是確定的。那樣的話,咱們就必須把代碼寫成下面的樣子:debug
程序清單3-2:
class Welcome { static void Main(){ System.Console.WriteLine("Please enter your name:"); System.Console.ReadLine(); System.console.WriteLine("Welcome to you!"); } }也就是說,在每一個Console前加上一個前綴"System."。這個小原點「.」表示Console是做爲System的成員而存在的。C#中拋棄了C和C++中繁雜且極易出錯的操做符象「::」和「->」等。C#中的複合名字一概經過「.」來鏈接。
System是.NET平臺框架提供的最基本的名字空間之一。有關名字空間的詳細使用方法咱們將放在第十七章中詳細介紹。在這裏,只要咱們學會怎樣導入名字空間就足夠了。
3.2.2 類和類的方法
讓咱們從寫第一個程序時就記住:每一個東西都必須屬於一個類。若是您是C或C++的程序員,請暫時忘掉那些全局變量。
在程序的第二行,class Welcome聲明瞭一個類,類的名字叫作Welcome。這個程序爲咱們所做的事情就是依靠它來完成的。
和C、C++中同樣,源代碼塊被包含在一對大括號「{」和「}」中。每個右括號「}」老是和它前面離它最近的一個左括號「{」相配套。若是左括號「{」和右括號「}」沒有所有配套,那程序就是一個錯誤的程序。
static void Main()表示類Welcome中的一個方法。方法老是爲咱們完成某件工做的。
注意:在C#程序中,程序的執行老是從Main()方法開始的。一個程序中不容許出現兩個或兩個以上的方法。對於習慣了寫C控制檯程序的讀者,請牢記:C#中Main()方法必須被包含在一個類中。
3.2.3 程序的輸入和輸出
程序所完成的輸入和輸出功能都是經過Console來完成的。Console究竟是什麼呢?它是在名字空間中System已經爲咱們定義好的一個類,這裏咱們不用管它是怎麼完成工做的,只要使用它就能夠了。
上面的代碼中,類Console爲咱們展示了兩個最基本的方法:WriteLine和ReadLine。 Console.ReadLine表示接受輸入設備輸入,Console.WriteLine則用於在輸出設備上輸出。
咱們再爲讀者介紹Console中用於輸入輸出的另兩個方法:Read和Write。它們和ReadLine與WriteLine的不一樣之處在於,ReadLine和WriteLine執行時至關在顯示時多加了一個回車鍵,而使用Read和Write時則光標不會自動轉移到下一行。
讓咱們再對例子程序進行擴展,使得用戶的輸入對輸出產生做用。
程序清單3-3:
using System; class Welcome { Static void Main(){ Console.WriteLine("please enter your name:"); string name=Console.ReadLine(); Console.WriteLine("Welcome to you,{0}!",name); } }咱們用到了string name=Console.ReadLine()這條語句。其中string name表示聲明一個字符串類型的變量 name。系統定義的Console類提供的方法ReadLine()的返回值類型爲string。因此,這句話表示從輸入設備讀取一個字符串,並把讀取的值賦予變量 name。
再來看一下程序的最後一條輸出語句:
Console.WriteLine("Welcome to you,{0}!",name);
這條語句表示在屏幕上對輸出的字符串進行格式化。其中表示用方法的第二個參數來替代格式化後字符串相應的位置。對字符串進行格式化的參數能夠是一個字符串,也能夠是一個字符,或者是一個整數,等等。採用這種方式最多能夠格式化三個變量。好比:
int x=3;
string name1="Mike";
string name2="John";
Console.WriteLine("Welcome to you {0} times,{1} and {2}!",x,name1,name2);
和絕大多數編程語言同樣,C#提供了字符串類型string,它與C中的MFc爲咱們提供的類十分相似。C#中的string類型是一個引用類型(引用類型在第四章中咱們有詳細說明),爲標準字符集。利用string能夠方便地對字符串進行鏈接、截斷等操做。
好比:
string s="Good"+"Morning";
char x=s[3];
例子演示了字符串s由兩個字符串"Good"和"Morning"相加獲得。字符串還能夠經過下標進行索引,獲得一個字符。上面的例子中字符X的值爲「d」。
因此,源程序3-4和源程序3-3沒有什麼區別:
程序清單3-4:
using System; class Welcome { static void Main(){ Console.WriteLine("Please enter your name:"); string message="Welcome to you"+Console.ReadLine(); Console.WriteLine(message); } } 3.3 運行程序
理解了源程序中每條代碼的具體含義後,下一步要作的就是讓這個程序真正可以運行。不過對源代碼即便還有不明白的地方也沒有關係,在後續章節的學習中,您最終會熟練掌握這些概念的。
若是您的電腦上安裝了Visual Studio.Net,則能夠在集成開發環境(Integrated Developer Environment,IDE)中直接選擇快捷鍵或菜單命令,編譯並執行源文件。
若是您不具有這個條件,那麼您至少須要安裝Microsoft.Net Framework SDK,這樣纔可以不妨礙您在本書中繼續學習C#語言。實際上,.Net平臺內置了C#的編譯器。
下面讓咱們使用這個微軟提供的命令行編譯器對咱們的程序進行編譯。
啓動一個命令行提示符,在屏幕上輸入一行命令:
csc welcome.cs
咱們假設您已經將welcome.cs文件保存在當前目錄下。若是一切正常,welcome.cs文件將被編譯、運行,屏幕上出現一行字符,提示您輸入姓名:
Please enter your name:
輸入任意個字符並按下回車鍵,屏幕將打印出歡迎信息:
Welcome to you!
注意:和目前爲止咱們使用過的絕大多數編譯器不一樣,在C#中,編譯器只執行編譯這個過程,而在C和C++中要通過編譯和連接兩個階段。換而言之,C#源文件並不被編譯爲目標文件(.obj),而是直接生成可執行文件(.exe)或動態連接庫(.dll)。C#編譯器中不須要包含連接器。
編譯選項
咱們能夠靈活地使用.Net平臺提供的命令行編譯器的不一樣選項,選擇不一樣的編譯方式,從而靈活地對編譯進行控制。
例如,若是咱們但願對源文件welcome.cs進行編譯,生成名爲MyWelcome.exe的可執行文件,咱們能夠採用這樣的命令:
csc/out: MyWelcome.exe welcome.cs
若是咱們並不須要一個可執行文件,而僅僅是但願簡單地檢查源文件中是否存在語法錯誤,則命令能夠寫成:
csc/nooutput: welcome.cs
若是不知道各個選項的具體含義,能夠經過求助來得到:
csc/?
爲方便讀者,咱們在表3-1中按字母排序的順序列出了命令行編譯器csc經常使用的參數及其用途。更詳細的信息請參閱C#聯機幫助文檔。
表3-1 命令行編譯器選項
選項 做用 @ 指定響應文件 /? 列出編譯命令選項 /addmodule 指定一個或多個模塊做爲裝配的一部分 /baseaddress 指定載入動態連接庫的首選地址 /bugreport 生成一個報告文件,其中包含程序Bug的詳細信息 /checked 指定算術運算的溢出是否會致使程序在運行時拋出一個異常 /codepage 指定編譯的全部源文件所使用的代碼頁 /debug 給出調試信息 /define 定義預處理程序的符號 /doc 由文件註釋生成XML文件 /fullpaths 指定輸出的絕對路徑 /help 列出編譯命令選項 /incremental 容許對源文件進行遞增式編譯 /linkresouce 在裝配時連接指定的NET資源 /main 指定Main方法所處的位置 /nologo 編譯過程當中不顯示編譯信息 /nooutput 編譯源文件但不輸出 /nowarn 編譯過程當中不生成警告信息 /optimize 指定編譯時是否進行優化 /out 指定輸出文件 /recurse 搜索子目錄以尋找源文件 /reference 從包含裝配的文件中導入元數據 /resource 把NEt資源內嵌到輸出文件 /target 指定輸出文件的格式 /target:exe 輸出文件爲exe可執行文件 /target:library 輸出文件爲連接庫 /target:module 輸出文件爲模塊 /target:winexe 輸出文件爲winexe可執行文件 /unsafe 容許編譯使用了不安全關鍵字的代碼 /warn 設置警告級別 /warnaserror 把警告信息做爲錯誤看待 /win32icon 把.ico圖標文件插入到輸出文件 /win32res 把Win32資源插入到輸出文件 3.4 添加註釋
應用程序並非只要你本身一我的能看懂就好了。無論之前計算機教師或者是編程書籍是否已經告誡過,這裏我還要一再強調:養成良好的代碼註釋的習慣。這是一名優秀的程序員所必備的條件之一。代碼註釋不會浪費您的編程時間,它只會提升您的編程效率,使您的程序更加清晰、完整、友好。
C#註釋的方式和C++沒有區別,每一行中雙斜槓「//」後面的內容,以及在分割符「/」和「/」之間的內容都將被編譯器忽略。
這樣,咱們就能夠採用「//」進行單行註釋,採用分割符「/」和「/」進行多行註釋。讓咱們對Welcome程序加上註釋:
程序清單3-5:
//源文件:welcome.cs
/*說明:這裏是個人第一個
C#程序 */
using System;
class Welcome { static void Main(){ Console.WriteLine("please enter your name:"); //要求用戶輸入姓名: Console.ReadLine(); //讀取用戶輸入; Console.WriteLine("Welcome to you!"); /本行代碼用於打印歡迎信息: 您能夠在這裏添加本身的代碼: 程序在這裏結束/ } }上面的註釋彷佛有些小題大做,但它畢竟說明了C#中註釋的使用方法。
下面是對C#程序進行註釋時要注意的兩個問題:
首先,避免在「//」以後的單行註解中使用反斜槓符號「\」。由於反斜槓符號「\」在C#中是一個續行符,這樣作每每會致使你所不但願的結果出現。例如,當你寫了相似於下面的代碼:
Console.WriteLine("The result is:{0}",//
150);
在編譯這段代碼時,「//」表示邏輯上同一行剩餘的全部文字被做爲註釋看待,而續行符「\」則將這一行同下一行鏈接起來,那麼第二行也被做爲註釋的一部分。這時編譯器找不到與第一行的左括號「(」相匹配的右括號「)」,所以編譯出錯。
其次,分割符「/」和「/」之間的註釋不能有嵌套註釋。這是由於,C#編譯器從遇到第一個分割符「/」開始,將忽略下一個「/」,直到趕上下一個與之匹配的分割符「/」才認爲註釋結束,這樣編譯器就會對多餘的「/」報告錯誤,認爲沒有「/*」與之相匹配。
一些程序員常常習慣於把程序中不須要或暫時不須要的代碼片斷首尾分別加上分割符「/」和「/」。這時,若是這些代碼片斷自己又含有註釋的話,咱們所討論的這種錯誤就會發生。這時,咱們建議您換一種方式,把預處理語句# if #endif等貫穿在程序中使用,由於它們能夠強制編譯器忽略已包含註釋的源代碼片斷,從而經過這種方式來實現源代碼的嵌套註釋。
以上提到的在註釋中可能發生的兩種問題,若是編譯器報告錯誤,那已是幸運的了。若是是本來錯誤的程序被認爲是正確的加以編譯,或者程序代碼的原意所以被曲解,形成的錯誤每每難以發現,那時形成的後果將會嚴重得多。
菜鳥與老鳥的差異,只會寫程序代碼,不會調試源代碼。 每每要實際 ok