我有兩個不同的命名空間,每一個Thing
類:爲什麼在C#中添加名稱空間別名可消除歧義?
namespace First.Second.Third
{
public class Thing { }
}
namespace Fourth.Fifth.Sixth
{
public class Thing { }
}
現在我嘗試使用Thing
其他地方,當然,編譯器會抱怨,由於不明確的引用的那類:
namespace ConsoleApp1
{
using First.Second.Third;
using Fourth.Fifth.Sixth;
internal static class MainEntryPoint
{
internal static void Main(string[] args)
{
var x = new Thing(); // Complaint.
}
}
}
如果我向using
指令中的某個命名空間添加別名,編譯器錯誤消失:
using MyAlias = First.Second.Third;
using Fourth.Fifth.Sixth;
現在,編譯器認爲我指的是Fourth.Fifth.Sixth.Thing
當我做var x = new Thing();
。
爲什麼編譯器只是通過向其中一個名稱空間添加別名來解決歧義問題?爲什麼它會自動選擇我的沒有的名稱空間別名?
我希望這是有據可查的,並在SO和其他地方多次報道過,但我找不到答案。如果有人能幫我找到這個騙子,有人可以幫我嗎?
編輯:我不是每個人都在同一頁上,我猜。這裏有一個真實世界的例子可能有所幫助:
如果我有兩個名爲「Bob」的人,並且我只是說「在這裏,把這個給Bob」,你不知道該給誰。如果我說,一個是「鮑勃史密斯」,另一個是「鮑勃約翰遜」,當然我現在可以說「在這裏,把這個給鮑勃史密斯。」現在,如果我說,「讓我們給鮑勃·史密斯命名一個新名字:鮑勃·布拉迪」。如果我然後說「在這裏,給這個」鮑勃「,這仍然是模棱兩可的。請參閱我的觀點?
因爲編譯器不知道這本是一個你想使用別名? –
要引用First.Second.Third,您必須將它明確地實例化爲x.Thing,所以不會因爲別名而產生歧義(您不直接使用名稱空間)。 – Gusman
我知道。我不問如何使用它。我在問爲什麼模棱兩可會消失。 –