命名类和命名空间是一样的吗?

时间:2012-02-26 17:48:57

标签: c# .net naming-conventions

我是C#的初学者(虽然我很了解Java)并且在命名空间和类/接口方面遇到了问题。

什么是行不通的:

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

因为存在错误,“Project.Node”类型和命名空间“Project.Node”的名称相同。

我将解释为什么我会故意为这些命名:我有很多类实现“Node”接口。这些类应该都在一个命名空间中,所以为什么不把它们命名为“Node”我想。接口“节点”应该在项目的根命名空间中,因为它被其他类使用,我不希望例如将界面“Node”移动到“Project.Node.Node”,因为我认为仅仅因为我需要界面而导致“Project.Node”是愚蠢的。

所以我的问题是,我应该如何解决这种情况?我应该如何命名我的类/命名空间,是否有一种很好的方式来做这个,这种情况是否有任何命名约定?

4 个答案:

答案 0 :(得分:8)

您应该遵循.NET约定并命名您的界面INode。然后 Node 命名空间内的类将实现您的INode接口。

答案 1 :(得分:1)

解决问题的最简单方法就是采用接口的C#/ .NET命名约定,即添加I - INode,而不是Java-esque Node。此外,它应该位于Nodes命名空间下。导入命名空间并不是一件麻烦的事情,特别是因为大多数IDE,当然还有Visual Studio,可以为您自动化它。它可以防止您的根命名空间变得拥挤和不可浏览。

其次,我认为命名空间的更直观的名称是使用复数:Projekt.Nodes,所以你将拥有:

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

答案 2 :(得分:1)

.Net中的名称空间基本上与Java中的包非常相似。你可以通过调用你的接口INode解决这个问题。这是一个.Net约定,在接口前面添加字母I.傻,匈牙利符号,但愚蠢的约定是.Net开发人员习惯用的; - )

答案 3 :(得分:0)

不允许在类型和名称空间之间发生名称冲突。然后是.Net约定为接口加上大写'i',因此你的接口Node将成为INode。这是.Net框架的所有库和组件中的标准。将标准应用于您的代码应该可以轻松解决您的冲突问题。

现在在我看来,从架构的角度来看,如果INode的所有实现都在Node命名空间下,我也希望在它下面找到INode