包含

2014-05-12 19 views
0

時的名稱空間,程序集和繼承層次結構通常,在將命名空間或程序集包含到代碼中時,我經常遇到奇怪的情況,其中名稱空間是從另一個名稱空間繼承的,但父名稱空間中的類不可用。例如,當使用List<>Dictionary<>時,我使用System.Collections.Generic命名空間。但是,如果我也想使用IEnumerator,我還必須包含System.Collections名稱空間。不應該System.Collections已被System.Collections.Generic的任何成員引用,因爲它是一個孩子?這兩個名稱空間也共享相同的程序集mscorlib.dll。包含

爲什麼父子名稱空間不包含在子級?

+0

因爲編譯器很愚蠢。並且必須被告知包含什麼。或者是什麼問題? – Sinatr

+0

@Sinatr這是一個問題,我只是想知道爲什麼編譯器是如此愚蠢,以至於不包含父命名空間 –

+2

@OutlawLemur:「愚蠢」我認爲你的意思是「遵守語言規範」。 –

回答

4

不應該System.Collections已被System.Collections.Generic的任何成員引用,因爲它是一個孩子?

沒有。名稱空間之間沒有繼承關係。 A using指令僅限從該名稱空間導入類型 - 它不會從名稱空間導入類型從給定名稱空間或包含在給定名稱空間名稱中的名稱空間開始

例如,後:

using System.Collections; 

...這並不讓你使用List<T>作爲一個簡單的名稱System.Collections.Generic.List<T>,也不讓你使用GuidSystem.Guid一個簡單的名字。

的例外是,如果你的X.Y.Z命名空間聲明中編寫代碼,隱式導入的命名空間X.YX(以及X.Y.Z,當然)。 (在這個例子中,X.Y如果X.Y.Z包含名字空間,但它不是繼承關係。)

+0

因此,名稱空間之間沒有實際的繼承關係,Msdn只是在糟糕的上下文中使用該術語? (參見['List <>'](例如http://msdn.microsoft.com/zh-cn/library/6sh2ey19(v = vs.110).aspx) –

+0

@OutlawLemur:它在何處使用該術語在那個文檔中有錯誤? (請正確引用。) –

+0

在繼承層次結構部分中的代碼示例或語法之前 –