初學者很容易把這些概念搞混淆。先說說項目(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一致。
實例演練:
(一)創建控制台應用程序“Hello World!”
1、打開Visual Studio.Net,選擇“File”菜單的“new”,選擇“Project”;
2、選擇Visual C# Projects中的“Console Application”,如圖所示:
在Location中,定位你要保存的項目的路徑,而名字則為“FirstExample”。該名字此時既是解決方案的名字,同時也是該項目的名字。