c 命名空間的理解

2021-04-12 19:00:44 字數 2137 閱讀 1267

c# 程式中的若干上下文要求指定命名空間名稱或型別名稱。兩種形式的名稱都寫為以「.」標記分隔的乙個或多個識別符號。

namespace-name:(命名空間名稱:)

namespace-or-type-name(命名空間或型別名稱)

type-name:(型別名:)

namespace-or-type-name(命名空間或型別名稱)

namespace-or-type-name:(命名空間或型別名稱:)

identifier(識別符號)

namespace-or-type-name  .  identifier(命名空間或型別名稱  .  識別符號)

「型別名」是乙個「命名空間或型別名稱」,它引用乙個型別。需遵循下述的決策:「型別名」的「命名空間或型別名稱」必須引用乙個型別,否則將發生編譯時錯誤。

「命名空間名稱」是乙個「命名空間或型別名稱」,它引用乙個命名空間。需遵循下述的決策:「命名空間名稱」的「命名空間或型別名稱」必須引用乙個命名空間,否則將發生編譯時錯誤。

「命名空間或型別名稱」的含義按下述步驟確定。

l     如果「命名空間或型別名稱」由單個識別符號組成:

t     如果「命名空間或型別名稱」出現在類或結構宣告體內,則從該類或結構宣告開始查詢,遍及每個封閉它的類或結構宣告(若它們存在的話),如果具有給定名稱的成員存在、可訪問且表示型別,則「命名空間或型別名稱」引用該成員。請注意,當確定「命名空間或型別名稱」的含義時,會忽略非型別成員(常數、字段、方法、屬性、索引器、運算子、例項建構函式、析構函式和靜態建構函式)。

t     否則,從發生「命名空間或型別名稱」的命名空間開始,遍及每個封閉它的命名空間(若它們存在的話),直至全域性命名空間結束,對下列步驟進行評估,直到找到實體。

ø     如果命名空間包含具有給定名稱的命名空間成員,則「命名空間或型別名稱」引用該成員,並根據該成員歸為命名空間或型別類別。

ø     否則,如果命名空間有乙個對應的命名空間宣告,且「命名空間或型別名稱」出現的位置包含在該命名空間宣告中,則:

‐如果該命名空間宣告包含乙個將給定名稱與乙個匯入的命名空間或型別關聯的 using 別名指令,則「命名空間或型別名稱」引用該命名空間或型別。

‐否則,如果該命名空間宣告中有乙個「using 命名空間指令」,它匯入的那個命名空間內含有乙個與給定名稱完全匹配的型別,則「命名空間或型別名稱」引用該型別。

‐否則,如果該「using 命名空間指令」匯入的命名空間包含多個具有給定名稱的型別,則「命名空間或型別名稱」被認為是含義不清的,將導致發生錯誤。

t     否則,「命名空間或型別名稱」就被認為是未定義的,導致發生編譯時錯誤。

l     否則,「命名空間或型別名稱」的形式為 n.i,其中 n 是由除最右邊的識別符號以外的所有識別符號組成的「命名空間或型別名稱」,i 是最右邊的識別符號。n 最先按「命名空間或型別名稱」解析。如果對 n 的解析不成功,則發生編譯時錯誤。否則,n.i 按下面內容解析。

t     如果 n 是乙個命名空間而 i 是該命名空間中可訪問成員的名稱,則 n.i 引用該成員,並根據該成員歸為命名空間或型別類別。

t     如果 n 是類或結構型別而 i 是 n 中可訪問型別的名稱,則 n.i 引用該型別。

t     否則,n.i 是無效的命名空間或型別名稱並將發生編譯時錯誤。

每個命名空間和型別都具有乙個完全限定名,該名稱在所有其他命名空間或型別中惟一標識該命名空間或型別。命名空間或型別 n 的完全限定名按下面這樣確定:

l     如果 n 是全域性命名空間的成員,則它的完全限定名為 n。

l     否則,它的完全限定名為 s.n,其中 s 是宣告了 n 的命名空間或型別的完全限定名。

換言之,n 的完全限定名是從全域性命名空間開始通向 n 的識別符號的完整分層路徑。由於命名空間或型別的每個成員都必須具有惟一的名稱,因此,如果將這些成員名稱置於命名空間或型別的完全限定名之後,這樣構成的成員完全限定名一定符合惟一性。

下面的示例顯示了若干命名空間和型別宣告及其關聯的完全限定名。

class a {}      // a

namespace x      // x

// x.b.c

}namespace y     // x.y

// x.y.d}}

namespace x.y     // x.y

// x.y.e

}

php命名空間的理解

命名空間概述這是只是大概講一下用法,如果想詳細了解,還是閱讀官方手冊比較好。什麼是命名空間?從廣義上來說,命名空間是一種封裝事物的方法。在很多地方都可以見到這種抽象概念。例如,在作業系統中目錄用來將相關檔案分組,對於目錄中的檔案來說,它就扮演了命名空間的角色。具體舉個例子,檔案 foo.txt 可以...

命名空間概述理解

命名空間概述理解 命名空間概述 什麼是命名空間?從廣義上來說,命名空間是一種封裝事物的方法。在很多地方都可以見到這種抽象概念。例如,在作業系統中目錄用來將相關檔案分組,對於目錄中的檔案來說,它就扮演了命名空間的角色。具體舉個例子,檔案 foo.txt 可以同時在目錄 home greg 和 home...

spring p命名空間 c命名空間

p命名空間 1.需要引入命名空間p 並不真實存在 是在spring內部中實現的 xmlns p 2.如果是引用注入需要加 ref字尾 p和c命名空間 並不適用於集合引數 c命名空間 1.需要引入命名空間c 並不真實存在 是在spring內部中實現的 xmlns c 2.可以使用c 引數名 或c 引數...