2012-02-26 31 views
1

私はC#の初心者です(私はJavaもよく知っています)、名前空間とクラス/インタフェースの名前を同じにすることで問題が発生しました。タイプ「Project.Node」と名前空間「Project.Node」は、同じ名前が付けられていることにエラーがあるので名前を付けるクラスと名前空間は同じですか?

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

はどう機能しませんがこのです。

なぜ私はそれらを同じ名前にすることを意図しているのかを説明します。インターフェイス「ノード」を実装する多くのクラスがあります。これらのクラスはすべて1つの名前空間に入れる必要があります。だから私は「Node」と名づけてはいけません。インターフェイス "ノード"はプロジェクトのルート名前空間になければなりません。これは他のクラスで使用されているためです。インターフェイス "Node"を "Project.Node.Node"に移動してください。なぜなら、私はインターフェイスを必要とするだけなので、「Project.Node」を常にインポートするのは馬鹿だと思うからです。

私の質問は、この状況をどのように解決すればよいですか?どのようにクラス/名前空間に名前を付けるべきですか?このような状況のために命名規則がありますか?

答えて

8

.NET規則に従い、インターフェイス名をINodeにする必要があります。 ノード名前空間内のクラスは、INodeインターフェイスを実装します。

+0

ありがとうございます。私はこのような別の状況がありますが、インターフェースではありません。私は、他のクラスのリストを含むシングルトンの名前 "Library"を持っていたいと思います。あらかじめ定義されたメソッド(コードライブラリのようなもの)を考えてみましょう。私は意図的に "ライブラリ"に追加できるメソッドのネームスペースにも名前をつけていますが...このような状況で何かできることはありますか、単にネームスペースの別の名前を考える必要がありますか? – MoonShade

+0

かなりかわいいです。しかし、 'トリック'があります。 Pluralisation。 System.Windows。フォームにはフォームタイプが含まれています。私はあなたが名前空間に含まれるものを説明する方が良いと思いますが。LibraryComponentsまたはそれらの行に沿ったもの。 –

+0

インターフェイスの公式な.NET命名ガイドラインはここにあります:http://msdn.microsoft.com/en-us/library/8bc1fexb(v=vs.71).aspx –

1

この問題の最も簡単な解決策は、インターフェイスにC#/ .NETネーミング規則を採用することです。これはJava-esque NodeではなくI-INodeを追加することです。また、それはノードの名前空間の下に座っていなければならない(SHOULD)。ネームスペースをインポートすることは厄介なアクションではありません。特に、ほとんどのIDEやVisual Studioでは、自動的にネームスペースを自動化できます。ルートネームスペースが混雑していて、爆発しないようにします。

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

は、基本的には.NETの名前空間、Javaのパッケージに非常によく似ています。あなたがこれを持っていますので、Projekt.Nodes

は第二に、私は、名前空間のためのより直感的な名前は複数を使用していると思います。これを回避するには、Interface INodeを呼び出します。ハンガリーの表記法は愚かでも、愚かな表記法なのですか.Net開発者はとにかく慣れています;-)

+1

これらの愚かな.netユーザーが使用されている完全な意味を成すものに。 – JeremyK

0

タイプ間の名前の衝突は許されません。名前空間。次に、資本 'i'を接頭辞とする.Netの規約があるので、インタフェースNodeINodeになります。これは、.Netフレームワークのすべてのライブラリとコンポーネントの標準です。コードに標準を適用すると、衝突の問題を簡単に解決できます。

私の意見では、アーキテクチャ上の観点から、INodeのすべての実装がNode名前空間の下にある場合は、その下にINodeもあると考えられます。

関連する問題