2010-06-13 225 views
1

我正在構建一個類庫,並將其默認名稱空間用作「System」。假設我正在創建一個通用數據結構,稱爲PriorityQueue並將其放置在System.Collections.Generic命名空間下。類庫參考問題

現在,當我從另一個項目中引用該庫時,我無法再在「System.Collections.Generic」命名空間下看到PriorityQueue。雖然庫被引用,但我無法訪問它中的任何類。

任何人都可以請一些燈。我知道,如果我改變命名空間,一切都會好的,但我想創建一個無縫的集成,就像.net框架本身與其他項目一樣,以便可以引用該庫並忘記其命名空間。

+1

不知道爲什麼這是downvoted這可能是一個壞主意,但它不是一個壞問題 – msarchet 2010-06-13 16:12:21

+0

雖然添加到系統命名空間是一個壞主意,我想知道如何做到這一點很有趣。 – apoorv020 2010-06-13 16:36:02

+1

[類庫引用問題]的可能重複(http://stackoverflow.com/questions/3033042/class-library-reference-problem) – 2010-06-13 17:20:31

回答

2

把東西放入系統命名空間是一個壞主意。首先,最好明確知道你使用的東西在哪裏。但更重要的是,如果微軟發佈新的東西導致與你的命名衝突,你的東西就會崩潰。

第二個原因可能是你無法看到你的代碼。

2

如果您正在爲類使用System命名空間,那麼它們將在System中找到。

如果你想讓它們在System.Collections.Generic中找到,那麼你需要把它們放在那裏。

但讓我們清楚,在System. *中放置類是一個壞主意。

1

只需創建自己的名稱空間,例如因爲將類放置在預定義的框架名稱空間中並不是一個好主意。 MS可能會在後面的框架中引入相同的類,導致出現問題。

3

這是一個非常糟糕的主意。假裝你沒有想到它,並使用真正的命名空間。

也沒有與.NET Framework「無縫集成」。如果我們想訪問List<T>類,那麼我們就必須寫

using System.Collections.Generic; 

如果你把你的類MyCompany.Collections.Generic,那麼你會得到完全由.NET Framework中實現了「無縫」的同一級別本身。

+0

我非常清楚,改變命名空間將會起作用,這就是我一直在做的事情。但是這次我做了一次實驗,但失敗了。 我的問題是,mscorlib和System.dll共享相同的命名空間,但爲什麼不能我的?這是我原來的問題。對不起,模糊。 – 2010-06-13 16:22:15

+0

@Anindya Chatterjee如果每個人都試圖使用你的想法會怎麼樣? – 2010-06-13 16:33:36

0

如果它不清楚:這是一個真的壞主意。

系統名稱空間應該被認爲是保留和禁止的。如果微軟決定在將來與您的System.mycrap.blah標識符衝突的框架更新中引入一個類,那麼您將手上進行一些相當龐大的重構,並且對於部署到客戶,緊急更新和系統停機的潛在責任。

您不會創建自己的名爲「String」的類。同樣的道理(雙關),不要使用保留的名稱空間。

此外,命名空間「系統」並不真正描述您的命名空間的內容。通常情況下,命名空間應該表示一些東西 - 比如BlogEngine,DatabaseCore等。將所有內容都包含進系統中就像命名所有變量「x」或「temp」一樣,這意味着創建者並不真正理解這一層次的代碼劃分和組織。

1

有人提到這是一個壞主意嗎?有幾個原因讓你無法看到課程。從彙編參考文獻來看,只有一個很好的:你忘記了公開宣佈課程。

+0

+1實際上提到該類不可見的原因。 – 2010-06-13 16:23:44

+0

:)對不起,並非如此。 – 2010-06-13 16:26:54