在繼續學習之前,應該了解另乙個比較重要的主題——命名空間。它們是.net中提**用程式**容器的方式,這樣就可以唯一的標識**及其內容。命名空間也用作.net framework中給項分類的一種方式。大多數項都是型別定義,例如system.int32等。
預設情況下,c#**包含在全域性命名空間中。這表示對於包含在這段**中的項,只要按照名稱進行引用,就可以由全域性命名空間中的其他**訪問它們。可以使用namespace關鍵字位花括號中的**塊顯示定義命名空間。如果在該命名空間**的外部使用命名空間中的名稱,就必須寫出該命名空間中的限定名稱。
限定名稱包括它所有的繼承資訊。基本上,這意味著,如果乙個命名空間中的**要使用另乙個命名空間中定義的名稱,就必須包括對該命名空間的引用。限定名稱在不同的命名空間級別之間使用據點字元(.)。
例如:namespace levelone
//code in levelone namespace
//name "nameone" defined
//code in global namespace
這段**定義了乙個命名空間levelone,以及該命名空間中的乙個名稱nameone。在命名空間levelone中編寫的**可以使用nameone來引用該名稱,不需要任何分類資訊。但全域性命名空間中的**必須使用分類名稱levelone.nameone來引用這個名稱。
在命名空間中,使用關鍵字namespace還可以定義巢狀的命名空間。巢狀的命名空間通過其層次結構來引用,並使用據點區分層次結構的層次。這最好用乙個例子來說明。考慮下面的命名空間:
namespace levelone
//code in levelone namespace
namespace leveltwo
//code in levelone.leveltwo namespace
//name "nametwo" defined
//code in global namespace
在全域性命名空間中nametwo必須引用為levelone.leveltwo.nametwo,在levelone命名空間中,則可以引用位leveltwo.nametwo,在levelone.leveltwo命名空間中,則可以引用為nametwo。
要注意的是,名稱由命名空間唯一定義的。可以在levelone和leveltwo命名空間中定義名稱namethree:
namespace levelone
//name "namethree" defined
namespace leveltwo
//name "namethree" defined
這裡定義了兩個互不干擾的namethree,分別用levelone.namethree和levelone.leveltwo.namethree訪問。
建立了命名空間後,就可以使用using語句簡化對它們包含的名稱的訪問。實際上,using語句的意思是「我們需要這個命名空間中的名稱,所以不要每次總是要求對它們分類」。例如,在下面的**中,levelone命名空間中的**可以訪問levelone.leveltwo命名空間中的名稱,而無需分類:
namespace levelone
using leveltwo;
namespace leveltwo
//name "nametwo" defined
levelone命名空間中的**現在可以直接使用nametwo引用leveltwo.nametwo。
有時,與上面的namethree示例一樣,不同的命名空間中的相同名稱會產生衝突,使系統崩潰(此時**不能通過編譯)。此時,可以為命名空間提供乙個別名,作為using語句的一部分:
namespace levelone
using lt = leveltwo;
//name "namethree" defined
namespace leveltwo
//name "namethree" defined
levelone命名空間中的**可以把levelone.namethree引用位namethree,把levelone.leveltwo.namethree引用為lt.namethree。
using語句可以應用到包含它們的命名空間,以及該命名空間中包含的巢狀命名空間中。在上面的**中,全域性命名空間不能直接使用lt.namethree。但如果using語句宣告如下:
using lt = levelone.leveltwo;
namespace levelone
//name "namethree" defined
namespace leveltwo
//name "namethree" defined
這樣全域性命名空間中的**和levelone命名空間就可以使用lt.namethree。
這裡有一點要注意:using語句本身不能訪問令乙個命名空間中的名稱。除非命名空間中的**以某種方式鏈結到專案上,或者**是在該項目的原始檔中定義的,或在鏈結到該項目的其他**中定義的,否則就不能訪問其中包含的名稱。另外,如果包含命名空間的**鏈結到專案上,無論是否使用using,都可以訪問其中包含的名稱。using語句便於我們訪問這些名稱,減少**量,使之更合理。
using system;
using system.collections.generic;
using system.text;
using指令塊中的3行**使用using宣告:在這段c#**中使用systen、system.collections.generic和system.text命名空間,它們可以在該檔案的所有命名空間中訪問,無需分類。system命名空間是.net framework應用程式的根命名空間,提供了控制台應用程式所需要的所有基本功能。其他兩個命名空間常常用於控制台應用程式,所以該程式包含了這3行**。
表示式 表示式樹 表示式求值
總時間限制 1000ms 記憶體限制 65535kb 描述 眾所周知,任何乙個表示式,都可以用一棵表示式樹來表示。例如,表示式a b c,可以表示為如下的表示式樹 a b c 現在,給你乙個中綴表示式,這個中綴表示式用變數來表示 不含數字 請你將這個中綴表示式用表示式二叉樹的形式輸出出來。輸入輸入分...
中綴表示式 字首表示式 字尾表示式
中綴表示式 中綴記法 中綴表示式是一種通用的算術或邏輯公式表示方法,操作符以中綴形式處於運算元的中間。中綴表示式是人們常用的算術表示方法。雖然人的大腦很容易理解與分析中綴表示式,但對計算機來說中綴表示式卻是很複雜的,因此計算表示式的值時,通常需要先將中綴表示式轉換為字首或字尾表示式,然後再進行求值。...
中綴表示式 字尾表示式 字首表示式
正如我們常常潛意識認為我們所說的數字都是十進位制,對於數字的其他進製感覺不正確一樣,其實只是我們不熟悉而已,其他進製其實也不過就是一種對資料的表達方式而已。對於我們的表示式也是一樣。eg 表示式2 3 5 7 我們上面所看到的也就是我們平時常用的書寫表示式的方式就是我們所謂的 中綴表示式 字首表示式...