2012-02-26 112 views
1

我是C#的初學者(雖然我知道Java),並且遇到命名空間和類/接口命名相同的問題。命名類和名稱空間是否相同?

什麼都不行是這樣的:

- Projekt 
--> (Interface) Node 
--> (Namespace/Folder) Node 
-----> (Class): SomethingNode : Node 
-----> ... 

因爲有該類型「Project.Node」與命名空間「Project.Node」被命名爲相同的錯誤。

我將解釋爲什麼我會故意喜歡將它們命名爲相同的名稱:我有很多實現接口「節點」的類。這些類應該都在一個名稱空間中,爲什麼不把它們命名爲我認爲的「節點」。接口「節點」應該在項目的根名稱空間中,因爲它被其他類使用,我不想將接口「Node」移動到「Project.Node.Node」,因爲我認爲僅僅因爲需要接口而導致「Project.Node」導入會很愚蠢。

所以我的問題是,我該如何解決這種情況?我應該如何命名我的類/名稱空間,是否有一個很好的方法來完成這個任務,這種情況下是否有任何命名約定?

回答

8

你應該遵循.NET約定並命名你的接口INode。然後節點命名空間中的類將實現您的INode接口。

+0

好的,謝謝。我有這樣的另一種情況,但沒有接口。我想要一個包含其他類的列表的Singleton名稱「庫」,讓我們說預定義的方法(如代碼庫)。我會故意爲我可以在「庫」中添加的方法命名命名空間,儘管...在這種情況下,我可以做些什麼,或者我只需要考慮名稱空間的另一個名稱? – MoonShade 2012-02-26 18:02:46

+0

非常。雖然有'技巧'。複數。 System.Windows。表單包含一個表單類型。儘管我認爲你最好描述命名空間的內容。LibraryComponents或類似的東西。 – 2012-02-26 18:20:04

+0

你可以在這裏找到官方的.NET界面命名指南:http://msdn.microsoft.com/en-us/library/8bc1fexb(v=vs.71).aspx – 2013-06-22 09:32:57

1

問題的最簡單的解決方案是簡單地爲接口採用C#/ .NET命名約定,即添加I - INode,而不是Java類型Node。另外,它應該位於Nodes命名空間下。導入一個命名空間並不是一件麻煩的事情,特別是當大多數IDE,當然Visual Studio都可以爲你自動運行它。它可以防止您的根名稱空間擁擠並且無法瀏覽。

其次,我認爲,對於一個命名空間的更直觀的名稱使用複數:Projekt.Nodes,讓你有這樣的:

namespace Projekt 
{ 
    namespace Nodes 
    { 
     public interface INode { } 
     public class Node : INode { } 
    } 
} 
1

基本上命名空間在.net非常類似於Java包。你可以通過調用你的Interface INode來解決這個問題。這是一個.Net慣例,用字母I來表示接口的前綴。愚蠢的,匈牙利的符號,但愚蠢的慣例是什麼.net開發人員無論如何;-)

+1

該死的愚蠢.NET用戶被使用到完全有意義的事情。 – JeremyK 2012-02-26 18:03:28

0

你不允許名稱在類型和命名空間。然後有一個.Net前綴接口的.Net約定,大寫'i',所以你的接口Node會變成INode。這是.Net框架的所有庫和組件的標準。將標準應用於您的代碼應該可以輕鬆解決您的碰撞問題。

從我的角度來看,從架構的角度來看,如果INode的所有實現都在Node名稱空間下,我也希望在它下面找到INode

相關問題