2012-08-16 73 views
2

我有一個程序,定義一個類如何防止命名空間污染?

namespace @default 
{ 
    public class Test 
    { 
    } 
} 

那麼我認爲全球化志願服務青年有一個名爲Test類中沒有命名空間的另一個庫。我怎樣才能隱藏這個其他庫Test類,使我的程序不會看到@default.Test作爲其他庫Test類?

+0

對不起,這是迂腐,但'默認'是一個保留字。 – 2012-08-17 00:06:38

+1

@KendallFrey但是'@ default'不是。您可以用保留的關鍵字加上'@'作爲標識符。 – 2012-08-17 01:20:57

+0

我知道這仍然是命名空間的糟糕選擇,但它是一個代碼示例,而不是生產代碼。 – 2012-08-17 14:04:39

回答

4

默認情況下,在您的default命名空間中,default.Test類是您在說Test時將使用的類。

外面你default命名空間,你需要做這樣的事情在你的using語句:

using ExternalTest = global::Test; 
using Test = default.Test; 

第一行是不是絕對必要的,因爲你可以使用global::Test任何地方。

對於那些還沒有遇到全球之前:global (C# Reference)

+0

類別別名很好,但如果您是代碼的架構師,那麼提前計劃和儘可能避免它們會更好。我曾經在處理階級衝突時遇到過很多麻煩。可能不應該創建一個「Page」類...從那個學習。 – CoderMarkus 2012-08-17 00:09:55

+0

@TrueDevelopment我擁有這兩個庫,但是,我的參考是一箇舊的mfc/C++/cli應用程序,我們將其交叉編譯爲exe和dll。修復它不會是微不足道的。 – 2012-08-17 14:07:11

+0

我完全理解。我有很多我正在使用的代碼現在有相同的問題,並且不值得花時間回顧並重構所有代碼。對於任何可能偶然發現這篇文章的人來說,這只是對未來的建議。我從錯誤中學到了很多東西。 – CoderMarkus 2012-08-17 14:58:28

1

global::前加上標識符名稱以表示應該從全局(未命名)名稱空間開始找到它。例如:

class Test { } 

namespace Default { 
    public class Test { 
     global::Test theOtherOne; 
    } 
} 

您經常會看到它在自動生成的代碼中使用以避免意外的名稱衝突。 Like Resources.Designer.cs

相關問題