在C#中避免命名空间和类型名称冲突的准则是什么?

时间:2013-09-13 18:11:26

标签: c# namespaces

清洁代码应该为实体使用简短有意义的名称。因此,给定一个处理机器人的应用程序,我希望有一个类库Robot,其名称空间Robot具有类Robot。让我们假设只有一个机器人对象,例如代码Hubot

然而,naming a class name the same as its namespace is an extremely bad idea in C#

避免命名空间和类型名称冲突的准则是什么?

具体来说,考虑到上面的情况,如果我想保留类名Robot,我该如何命名命名空间?

5 个答案:

答案 0 :(得分:6)

指南非常明确:System之外的名称空间应为Company.Technology。这样可以明确消除歧义,并使用户更容易发现哪些命名空间与哪些技术相关联。请记住,命名空间的主要目的不是避免冲突,而是开发人员的工作效率。

指南在这里:

http://msdn.microsoft.com/en-us/library/893ke618(v=vs.71).aspx

您的命名空间应该类似于:

namespace MrtsCorp.Robotics 
{
  public sealed class Robot 
  {
     ...

如果您想查看此类命名空间的合理模型,请尝试以下操作:

http://msdn.microsoft.com/en-us/library/dd159952.aspx

我对名称为Ccr的名称空间感到兴奋,这些名称空间仅对域专家很明确,但Microsoft.Robotics.Simulation非常具有描述性。

答案 1 :(得分:3)

最简单的解决方法是,如果你真的无法想出任何东西,就是调用命名空间Robots

答案 2 :(得分:1)

Framework Design Guidelines on Names of Namespaces命名空间应采用以下格式:

<Company>.(<Product>|<Technology>)[.<Feature>][.<Subnamespace>]

所以既然这里的“公司”是Hubot的开源项目团队,并且真的没有其他类别适用于此,那么对于您的示例,它将类似于:

namespace HubotDev.Hubot
{
    public sealed class Robot
    {
       //...
    }
}

用法是

Hubot.Robot robot = //...;

答案 3 :(得分:0)

取决于命名空间中的内容。命名空间必须描述其中的内容。如果你有一堆机器人类,那么命名机器人是一个好主意。如果你有一个机器人和一个机器人的部件,那么它可能是RobotEntities,RobotParts,Machine ......的名字......

也许你的机器人类没有正确命名,也许它是BaseRobot或EnemyRobot,......

答案 4 :(得分:-2)

许多可能的想法中的另一个是使用小写命名空间。

它并不常见,但有时这些名称用于命名空间。即使它不符合命名准则,整个场景也不是(它与CompanyName.TechnologyName[.Feature][.Design]标准不匹配)。