2012-02-26 113 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

相关问题