《叩開c#之門》系列之一
前言:表弟想要學程式設計,我推薦他學習.net和c#。這一推薦不打緊,我卻承擔上了指導的職責。我又出差在外,直接輔導是不行了,通過郵件也太麻煩。推薦了幾本書,可惜他太菜了,總有無從下手的感覺。推及他人,在初學c#時,是否也有這樣的感覺呢?所以,就有了這個系列文章。表弟是我把他帶入計算機行業的,當初什麼都不懂,我曾經開啟計算機機箱,指點他**是硬碟、**是記憶體,是cpu,現在對於計算機硬體他早已可以做我師傅。希望學軟體程式設計也能這樣。
一、解決方案、專案、程式集、命名空間
初學者很容易把這些概念搞混淆。先說說專案(project),通俗的說,乙個專案可以就是你開發的乙個軟體。在.net下,乙個專案可以表現為多種型別,如控制台應用程式,windows應用程式,類庫(class library),web應用程式,web service,windows控制項等等。如果經過編譯,從副檔名來看,應用程式都會被編譯為.exe檔案,而其餘的會被編譯為.dll檔案。既然是.exe檔案,就表明它是可以被執行的,表現在程式中,這些應用程式都有乙個主程式入口點,即方法main()。而類庫,windows控制項等,則沒有這個入口點,所以也不能直接執行,而僅提供一些功能,給其他專案呼叫。
在visual studio.net中,可以在「file」選單中,選擇「new」乙個「project」,來建立乙個新的專案。例如建立控制台應用程式。注意在此時,visual studio除了建立了乙個控制台專案之外,該專案同時還屬於乙個解決方案(solution)。這個解決方案有什麼用?如果你只需要開發乙個hello world的專案,解決方案自然毫無用處。但是,乙個稍微複雜一點的軟體,都需要很多模組來組成,為了體現彼此之間的層次關係,利於程式的復用,往往需要多個專案,每個專案實現不同的功能,最後將這些專案組合起來,就形成了乙個完整的解決方案。形象地說,解決方案就是乙個容器,在這個容器裡,分成好多層,好多格,用來存放不同的專案。乙個解決方案與專案是大於等於的關係。建立解決方案後,會建立乙個擴充套件名為.sln的檔案。
在解決方案裡新增專案,不能再用「new」的方法,而是要在「file」選單中,選擇「add project」。新增的專案,可以是新專案,也可以是已經存在的專案。
程式集叫assembly。學術的概念我不想提,通俗的角度來說,乙個專案也就是乙個程式集。從設計的角度來說,也可以看成是乙個完整的模組(module),或者稱為是包(package)。因此,乙個程式集也可以體現為乙個dll檔案,或者exe檔案。怎樣劃分程式集也是大有文章的,不過初學者暫時不用考慮它。
命名空間(namespace)是在c++裡面就有的概念。引入它,主要是為了避免乙個專案中,可能會存在的相同物件名的衝突。這個命名空間的定義,沒有特殊的要求。不過基本上來說,為了保證其唯一性,最好是用uri的格式,例如brucezhang.com。這個命名空間有點像我們姓名中的姓,然後每個物件的名字則是姓名中的名。如果有重複,再國外的命名中,還可以加上middle name。那麼名都為勇的,由於姓氏不同也就分開了,或者叫張勇,或者叫趙勇。當然人的姓氏重複者居多,所以我們為命名空間取名時,盡可能的複雜一點。
有許多初學者,常常把乙個專案就理解為乙個命名空間。其實這兩者沒有絕對的聯絡,在專案裡我們也可以定義很多不相同的命名空間。但為了使用者便於使用,最好在乙個專案中,其命名空間最好是一體的層次結構。在visual studio裡,我們可以在專案中新建乙個資料夾,預設情況下,該資料夾下物件的命名空間,應該是「專案的命名空間.資料夾名」。當然,我們也可以在namespace中修改它。
命名空間和程式集名,都可以在visual studio中設定。用滑鼠右鍵單擊專案名,就可以彈出如下對話方塊:
在圖中,assembly name就是程式集名,如果經過編譯,則為該項目的檔名。而default namespace則為預設的命名空間。在開發軟體時,我們要養成良好的習慣,在建立新專案後,就將這些屬性設定好。一旦設定好了default namespace,則以後新建的物件,其命名空間即為該設定的值。至於程式集名,如果是dll檔案,建議其名最好與default namespace一致。
在location中,定位你要儲存的專案的路徑,而名字則為「firstexample」。該名字此時既是解決方案的名字,同時也是該項目的名字。
3、用滑鼠右鍵單擊專案名,在彈出的對話方塊中,將assembly name命名為helloworld,將default namespace命名為:brucezhang.com.firstexample。
4、此時visual studio中已經建立了乙個檔案,其名為class1.cs(如果是visual studio 2005,則預設為program.cs);修改該檔案的檔名為helloworld.cs,同時修改檔案中的namespace,和類名,如下:
namespace brucezhang.com.firstexample
public static void print(string msg)}}
在messageprinter類中,我們注意到並沒有main()方法,因為它不是應用程式。新增加的print()方法,能夠接收乙個字串,然後在控制台中顯示出來。
4、編譯printer專案。滑鼠右鍵單擊該專案名,在選單中選擇「build」。成功編譯後,找到資料夾printer/bin/debug,可以發現有檔案brucezhang.com.printer.dll,這就是最後形成的程式集檔案。
5、關聯這兩個專案。我們希望是在firstexample專案中用到printer專案的print()方法,前提是需要在firstexample專案中新增對printer專案的引用。右鍵單擊firstexample專案的「reference」,選擇「add reference」,在對話方塊中選擇「project」標籤,找到該專案並選中,最後如圖所示:
6、現在就可以在firstexample專案中使用messageprinter了。首先,在命名空間中新增對它的使用(using),然後再main()方法中呼叫它,最後**如下:
using system;
using brucezhang.com.printer;
namespace brucezhang.com.firstexample}}
7、執行。結果與前乙個例子一樣。
在這個例子中,解決方案中就包含了兩個專案,乙個是控制台應用程式,乙個是類庫。類庫提供一些基本的功能,如例子中的print()方法。我們常常把一些共用的方法,放到類庫中。這樣其他的應用程式就可以去呼叫它。例如本例的控制台應用程式。如果新建的windows應用程式,也需要這個功能,就可以直接引用messageprinter的print()方法,而不必重複去實現。
解決方案 專案 程式集 命名空間之間的聯絡與區別
一 解決方案 專案 程式集 命名空間 初學者很容易把這些概念搞混淆。先說說專案 project 通俗的說,乙個專案可以就是你開發的乙個軟體。在.net下,乙個專案可以表現為多種型別,如控制台應用程式,windows應用程式,類庫 class library web應用程式,web service,w...
C 命名空間和程式集
本文內容 1.命名控制項與程式集的區別。命名空間用於對型別進行邏輯分組。程式集則是程式的物理分組,對應於乙個dll或exe檔案。2.為什麼要使用兩種方式分組?把邏輯分組作為物理分組不是更簡單嗎?邏輯分組主要針對開發人員,而物理分組主要針對安裝和部署。除此之外,以下情況也需要使用兩種方式分組,否則會很...
CLR 程式集和命名空間
控制台應用program並非只是含有元資料的pe檔案,他還是程式集 assembly 程式集是乙個或多個型別定義檔案及資源檔案的集合。在程式及的所有檔案中,有乙個檔案容納了清單 manifest 清單也是乙個元資料表集合,表中主要包含作為程式集組成部分的那些檔案的名稱。此外,還描述了程式集的版本 語...