我有一個程序,定義一個類如何防止命名空間污染?
namespace @default
{
public class Test
{
}
}
那麼我認爲全球化志願服務青年有一個名爲Test
類中沒有命名空間的另一個庫。我怎樣才能隱藏這個其他庫Test
類,使我的程序不會看到@default.Test
作爲其他庫Test
類?
我有一個程序,定義一個類如何防止命名空間污染?
namespace @default
{
public class Test
{
}
}
那麼我認爲全球化志願服務青年有一個名爲Test
類中沒有命名空間的另一個庫。我怎樣才能隱藏這個其他庫Test
類,使我的程序不會看到@default.Test
作爲其他庫Test
類?
默認情況下,在您的default
命名空間中,default.Test
類是您在說Test
時將使用的類。
外面你default
命名空間,你需要做這樣的事情在你的using語句:
using ExternalTest = global::Test;
using Test = default.Test;
第一行是不是絕對必要的,因爲你可以使用global::Test
任何地方。
對於那些還沒有遇到全球之前:global (C# Reference)。
類別別名很好,但如果您是代碼的架構師,那麼提前計劃和儘可能避免它們會更好。我曾經在處理階級衝突時遇到過很多麻煩。可能不應該創建一個「Page」類...從那個學習。 – CoderMarkus 2012-08-17 00:09:55
@TrueDevelopment我擁有這兩個庫,但是,我的參考是一箇舊的mfc/C++/cli應用程序,我們將其交叉編譯爲exe和dll。修復它不會是微不足道的。 – 2012-08-17 14:07:11
我完全理解。我有很多我正在使用的代碼現在有相同的問題,並且不值得花時間回顧並重構所有代碼。對於任何可能偶然發現這篇文章的人來說,這只是對未來的建議。我從錯誤中學到了很多東西。 – CoderMarkus 2012-08-17 14:58:28
在global::
前加上標識符名稱以表示應該從全局(未命名)名稱空間開始找到它。例如:
class Test { }
namespace Default {
public class Test {
global::Test theOtherOne;
}
}
您經常會看到它在自動生成的代碼中使用以避免意外的名稱衝突。 Like Resources.Designer.cs
對不起,這是迂腐,但'默認'是一個保留字。 – 2012-08-17 00:06:38
@KendallFrey但是'@ default'不是。您可以用保留的關鍵字加上'@'作爲標識符。 – 2012-08-17 01:20:57
我知道這仍然是命名空間的糟糕選擇,但它是一個代碼示例,而不是生產代碼。 – 2012-08-17 14:04:39