出於好奇,我創建了兩個程序集,它們都有一個具有完全相同名稱空間(Library1
)的類(Class1
)。然後,我創建另一個客戶端引用這2個程序集並嘗試創建一個Class1
的實例。使用2個.NET程序集中的相同名稱和名稱空間的類型
編譯器毫不奇怪地給了我一個關於模糊引用的編譯錯誤。有沒有什麼辦法可以在我想用來避免歧義的程序集中明確指定類型?
注:我知道這很少,如果有的話,在實踐中發生。這只是出於對語言特徵的好奇心的一個問題。
出於好奇,我創建了兩個程序集,它們都有一個具有完全相同名稱空間(Library1
)的類(Class1
)。然後,我創建另一個客戶端引用這2個程序集並嘗試創建一個Class1
的實例。使用2個.NET程序集中的相同名稱和名稱空間的類型
編譯器毫不奇怪地給了我一個關於模糊引用的編譯錯誤。有沒有什麼辦法可以在我想用來避免歧義的程序集中明確指定類型?
注:我知道這很少,如果有的話,在實踐中發生。這只是出於對語言特徵的好奇心的一個問題。
我認爲你應該使用extern alias來將程序集命名空間包裝在Global命名空間之外。具體方法如下:
在引用了2個集的項目,選擇參考下的其中之一,並在屬性窗口從global
更改別名值,比方說,global, Library1a
。
對於其他參考做同樣的事情,但給它一個不同的別名 - 讓我們以global, Library1b
爲例。
插入extern alias Library1a;
和/或extern alias Library1b;
作爲任何使用程序集的類的前2行。
訪問含糊不清的成員時,請使用Library1a.
或Library1b.
來限定名稱空間。例子:Library1a.Library1.Class1...
Library1b.Library1.Class1...
它發生在實踐中,是一個真正的痛苦,外部別名不能總是解決問題。以下是一個問題的例子:Duplicate Namepsaces。