接著上一講,我們建立了一個名為"CSharpBasic"的控制台工程,首先看一下VS中的代碼編輯地區,預設開啟的是Program.cs這個檔案,VS為我們自動添加的代碼如下(由於我是用VS2008建立的,所以引入的命名空間與VS2005有所不同):
using System;<br />using System.Collections.Generic;<br />using System.Linq;<br />using System.Text;<br />// 以上為引入的命名空間<br />namespace CSharpBasic//本程式的命名空間<br />{<br /> class Program//類名<br /> {<br /> static void Main(string[] args)//程式的進入點Main函數<br /> {</p><p> }<br /> }<br />}<br />
下面我們來講解一下這個最基本的程式碼。
1、using語句:在這個檔案的最上部,看到有4行以using打頭的代碼,它們代表的意義為引入”using“後面的命名空間,那麼什麼是命名空間呢。首先來看看MSDN中的解釋:
命名空間是一種組織 C#
程式中出現的不同類型的方式。命名空間在概念上與電腦檔案系統中的檔案夾有些類似。與檔案夾一樣,命名空間可使類具有唯一的完全限定名稱。一個 C#
程式包含一個或多個命名空間,每個命名空間或者由程式員定義,或者作為之前編寫的類庫的一部分定義。
什麼意思呢?我們用比較通俗的話來解釋一下吧,比如 一個屋裡有兩個人,名字分別是”李明“和”張明“,那如果我們直叫”明“,他們倆就不知道我們叫的是誰,這是我們就要叫全名,比如”李明“,這樣,李明就能知道我們叫的是他,名”明“就好比C#的類,姓”李“和”張“就好比是不同的命名空間,當只有一個叫做”明“的人的時候,我們可以只叫”明“即可,但如果同時存在好幾個”明“的時候,我們就要叫他們的全名了。可能有人會說了,那如果有好幾個人都叫”李明“咋辦?同樣的道理,這時候,”李明“就是一個類,我們就要在這個類之前再加一個命名空間,比如”三年二班的”李明,“四年一班”的李明,等等……如果還在一個班裡,那就再加上其它的命名空間,如:坐第幾排第幾列的,等等……直到它們的全名唯一為止。叫全名肯定是比較妥當的了,但要每一個都寫全名,那會相當複雜和麻煩的,所以,using 語句就幫了我們一個大忙,可以把要用到的命名空間名稱寫到using後面,那麼在這個cs檔案中,要使用到這個命名空間下面的類時,直接輸入類名即可,而不用寫全名了,當然,如果碰到引入的命名空間下有類名重複的情況的時候,在用這些類時,還要把它們的全名都寫上,不然,編譯器無法知道你調用的是哪個類。.net類庫中已經預先定義了一部分命名空間了,如這個例子的頭四行,就是.net類庫預定義的命名空間。也就是說,我們可以在這個檔案裡直接寫System,System.Collections.Generic,System.Linq,System.Text這四個命名空間下的類,而不用再寫命名空間的名稱了。那麼,using是否只能寫在cs檔案的最頂頭呢?我們來試試把它們移動一下位置,把它們移到最下面:
namespace CSharpBasic//本程式的命名空間<br />{<br /> class Program//類名<br /> {<br /> static void Main(string[] args)//程式的進入點Main函數<br /> {</p><p> }<br /> }<br />}<br />using System;<br />using System.Collections.Generic;<br />using System.Linq;<br />using System.Text;<br />// 以上為引入的命名空間<br />
運行程式,看到編譯失敗,提示錯誤: using 子句必須位於命名空間中定義的所有其他元素之前(外部別名聲明除外)
看來是不行哦,我們還是老老實實地寫在namespace之前吧~~
2、本程式的命名空間:知道了命名空間的作用之後再來看看namespace CSharpBasic這句代碼,這句話的意思是為下面的類Program定義一個命名空間,名稱為CSharpBasic,這個是VS根據我們的工程名為我們自動建立的,我們當然可以將其改為我們自己喜歡的名字,一般都是以本公司的名稱或工程的類型來命名的,這裡我起名為ojlovecd。
3、類名稱:啥是類?先來看看MSDN對類的定義:類是 C#
中功能最為強大的資料類型。像結構一樣,類也定義了資料類型的資料和行為。然後,程式員可以建立作為此類的執行個體的對象。與結構不同,類支援繼承,而繼承是物件導向編程的基礎部分。
去除定狀補,就變成了“類是資料類型”,那什麼是資料類型?再來看看MSDN對資料類型的定義:
資料類型概述
類型可描述為:
內建數實值型別(如 int 或 char),或
使用者定義型別(如 class 或 interface)。
匿名型別,它由一組封裝在無名稱參考型別中的公用屬性群組成。
類型還可以定義為:
實值型別(C#
參考)(用於儲存值)。這些類型包括基元數實值型別、枚舉和結構,還包括這幾種類型的可以為 null 的版本。
參考型別(C#
參考)(用於儲存對實際資料的引用)。這些類型包括類、介面、數組和委託。
C# 是強型別語言;因此每個變數和對象都必須具有宣告類型。啥意思呢?也就是說,在C#裡面,你使用的任何變數或對象,都必須是某一個資料類型,不存在沒有資料類型的變數或對象。這就好比這世界上某一個新生命的誕生,它肯定是屬於某一個物種的。類型包括.net類庫內建的數實值型別,使用者自訂類型和匿名型別(匿名型別為C#3.0新增的特性),我們這裡的類,就屬於使用者自訂類型,關於類的詳細介紹,我們將在以後進行。跟命名空間一樣,類名也是我們可以自由更改的,它可以和命名空間的名稱起同一個,我們這裡把Program也改成ojlovecd。
4、程式進入點Main方法:“函數”一詞在C#裡已經改名為了“方法”,Main方法是C#程式的進入點。運行程式的時候,系統將會調用Main方法來啟動我們的應用程式,那麼,Main方法能否改名呢?我們來試試,把Main方法也改成ojlovecd試試:
using System;<br />using System.Collections.Generic;<br />using System.Linq;<br />using Text = System.Text;<br />// 以上為引入的命名空間<br />namespace ojlovecd//本程式的命名空間<br />{<br /> class ojlovecd//類名<br /> {<br /> static void ojlovecd(string[] args)//程式的進入點Main函數<br /> {</p><p> }<br /> }<br />}<br />
運行代碼,程式出錯,錯誤為: “ojlovecd”: 成員名稱不能與它們的封閉類型相同
看錯誤資訊,是告訴我們成員的名稱不能與類名相同,那我們再改個別的名稱看看,比如說改成CSDN:
using System;<br />using System.Collections.Generic;<br />using System.Linq;<br />using Text = System.Text;<br />// 以上為引入的命名空間<br />namespace ojlovecd//本程式的命名空間<br />{<br /> class ojlovecd//類名<br /> {<br /> static void CSDN(string[] args)//程式的進入點Main函數<br /> {</p><p> }<br /> }<br />}<br />
再次運行,還是出錯,錯誤為: 程式“C:/Documents and Settings/區健/My Documents/Visual Studio 2008/Projects/CSharpBasic/CSharpBasic/obj/Debug/CSharpBasic.exe”不包含適合於進入點的靜態“Main”方法
看來是不行的,也就是說程式不僅必須包括Main方法,而且Main方法還必須是靜態。那什麼是靜態?就是關鍵字static所修飾的成員,有什麼作用呢?我們以後再講。
把CSDN改回Main,我們在Main方法體(就是用話括弧{}包含的那部分)中,輸入如下代碼:
using System;<br />using System.Collections.Generic;<br />using System.Linq;<br />using Text = System.Text;<br />// 以上為引入的命名空間<br />namespace ojlovecd//本程式的命名空間<br />{<br /> class ojlovecd//類名<br /> {<br /> static void Main(string[] args)//程式的進入點Main方法<br /> {<br /> Console.WriteLine("Hello ojlovecd");<br /> }<br /> }<br />}<br />
按下Ctrl+F5,就可以產生我們的第一個應用程式了,如:
至此,我們的第一個應用程式建立並運行成功了,在下一講中,我們將會講解關於這個程式的更多有用資訊。