我讀過這種方式,程序員不得不爲他們的類考慮特殊名稱,以便在用戶PC上加載文件時不會與另一個名稱發生衝突。這是我不明白的,如果班級在例如DLL,它如何與PC上的其他類相沖突?名稱空間避免衝突 - 例子?
即使沒有名稱空間,如果我導入一個DLL,我想我需要從該DLL調用該類,所以我不能使代碼無法進行complile。 我真的很感謝這裏的解釋,謝謝!
我讀過這種方式,程序員不得不爲他們的類考慮特殊名稱,以便在用戶PC上加載文件時不會與另一個名稱發生衝突。這是我不明白的,如果班級在例如DLL,它如何與PC上的其他類相沖突?名稱空間避免衝突 - 例子?
即使沒有名稱空間,如果我導入一個DLL,我想我需要從該DLL調用該類,所以我不能使代碼無法進行complile。 我真的很感謝這裏的解釋,謝謝!
請考慮是否沒有命名空間。然後你從程序集中加載一個類型MyClass。現在,如果從另一個程序集加載另一個類型,並且存在一個MyClass。你如何加載第二種類型?怎麼辦告訴你要哪一個編譯器,當你說
MyClass o = new MyClass()
答案 - 你要的名字命名空間的唯一標識類,否則它是不明確的。所以你說爲什麼不把名字空間限制在程序集中。這很好,但看起來這是一個好主意,平臺的設計者引入了一個概念,任何人都可以在程序集中創建多個名稱空間,以便人們更好地分配代碼。然後我們問爲什麼不允許命名空間穿過程序集,以便我們可以更容易地分割代碼。
您對名稱空間有很多用途,它取決於您的應用程序設計人員想出一些適用於您的東西 - 即使它只有一個名稱空間。
DLL Hell, the Inside Story是一個很好的總結舊的問題 - C#針對每個設計發行者 - 所以你不必再擔心了。
例如: System.Drawing.Point和System.Windows.Point
所以,如果一個程序引用了兩個組件,沒有命名空間,編譯器會感到困惑,當你聲明Point p;
或Point p = new Point(1,1);
,例如
但是,如果您在代碼中使用了兩個名稱空間並寫入Point,哪一個是picekd?現在如何使用 – CuriousOne 2010-10-22 09:24:17
如果你使用了兩個命名空間,你必須使用全名,即'System.Drawing.Point p = System.Drawing.Point(1,1);' – 2010-10-22 09:32:34
好,所以我可以有點寫我自己的Random類或List類在我的命名空間中,然後我將需要原始的全名,對吧?當然是 – CuriousOne 2010-10-22 09:18:16
。完全正確! – 2010-10-22 09:19:45
謝謝,我現在明白了 – CuriousOne 2010-10-22 09:23:06