2013-02-01 91 views
0

我有一堂課讓我們說它叫做「蘋果」。比方說,類是在一個文件夾中的一個cs文件名爲「蘋果」如何避免在C#中命名空間和源文件名衝突?

Project 
    -Apples 
     -Apples.cs 
    -main.cs 

我怎麼可以參考它無需編寫這樣的:

Main.cs

Apples.Apples.testVar = 2; 

和只寫

Main.cs:

Apples.testVar = 2; 

有沒有辦法做到這一點,或者我將不得不忍受它或更改文件夾名稱?

+5

*不要將其命名類一樣,它的命名空間* http://blogs.msdn.com/b/ericlippert/ archive/2010/03/09/do-not-name-a-class-the-same-as-its-namespace-part-one.aspx – asawyer

+0

它必須關注的命名空間而不是文件夾名稱。 (儘管默認情況下它們是相同的) – heisenberg

回答

1

把這個在你的文件的頂部 -

using Apples = Apples.Apples;

1

你可以在你的using語句化名「蘋果」:

using Apples = Apples.Apples.testVar; 

或任何你想使它更易於閱讀。

+0

是的,但它仍然需要蘋果作爲對名稱空間的引用而不是類 – DazKins

+0

爲了使這個工作起見,別名需要是「蘋果」以外的任何其他東西:)否則,編譯器仍然不知道你是指一個命名空間還是該類。 –

+0

我認爲不完全清楚的是'testVar'在這種情況下究竟是什麼。它是「蘋果」類還是變量名的嵌套類? –

1

是,如果你使用的是C#你只需要添加它在使用引用了上面的代碼文件的你是:

EG:

using Apples.Apples;

您只需確保您具有項目集的參考,如果它不在您當前的項目中。

2

如果您在visual studio中有一個文件夾並在其中創建一個類,Visual Studio(可能還有其他IDE)會自動將該文件夾的名稱追加到從該文件夾創建的任何文件的名稱空間中。

這並不意味着以任何方式命名空間必須保持這種方式。 「文件夾」純粹是爲了組織目的,並不參與編譯代碼。文件名與實際代碼無關。如果您在Apples.cs看起來只是改變:

namespace Apples.Apples 
{ 
    //.... 

namespace Apples 
{ 
    //... 

它只是你的IDE使用作爲假設你想要什麼規則。你不需要遵循它。

編輯:至少這是我認爲這裏的誤解,因爲你正在關注文件夾名稱 - 這意味着沒有代碼,只對你很重要。另外,如前所述,您可能會掛在名稱空間名稱和類名稱之間的歧義之處。正如其他答案中所提到的,將類命名爲命名空間是個不錯的主意。

默認情況下,項目的全局名稱空間將與您的項目名稱相同。因此,如果您將項目命名爲「蘋果」,然後創建一個名爲「蘋果」的文件夾並在該文件夾中創建一個名爲「蘋果」的類 - 然後您將通過以下命名空間鏈導航到您的類:

Apples.Apples.Apples 

你得出的結論是你必須根據文件夾/文件名來做到這一點,但它確實是名稱空間/類。你有幾個選擇,但底線是爲了消除混亂和混亂2或全部3這些「蘋果」需要改變。更改文件名或文件夾名稱將不起作用。您必須更改類名稱和至少一個名稱空間名稱。更合適些:

AppleProject.Apples.AppleBase 

甚至就這麼簡單:

Apples.Apple // removed the extra namespace in the middle