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

7
干净的代码应该为实体使用简短且有意义的名称。因此,假设我们有一个处理机器人的应用程序,我希望有一个名为Robot的类库项目,其命名空间为Robot,其中包含一个Robot类。假设只有一个机器人对象,比如Hubot的代码。
然而,在C#中,将类名与其命名空间相同是极为不好的做法
如何避免命名空间和类型名称冲突的指南是什么?
具体来说,考虑上面的情况,如果我想保留类名Robot,我应该如何命名命名空间?

2
命名空间为Robots。另请参阅BCL中的System.Collections和许多其他示例。 - millimoose
1
(此外,投票关闭,因为这肯定是一项意见调查。名称是任意的,请选择一个对您有意义且有效的名称。) - millimoose
4
阅读框架设计指南。 - Eric Lippert
@mrts 您将根据哪些标准来评判答案的有效性?除了“编译”和“不编译”之外,您如何判断特定约定是否更可取?如果没有明确的标准,这真的只是个人意见,缺乏任何事实/参考/专业知识等。 - Servy
然而,如果没有更为优雅的方案出现,我将接受Robots作为答案,因为 (1) 它符合框架设计指南,(2) 它使命名空间名称简短且有意义。 - mrts
显示剩余4条评论
5个回答

9
指南非常清晰:在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是非常描述性的。

谢谢!这正是我寻找的方向。我有类似的模糊感觉,但无法确定命名空间应该命名为通用技术领域。除非有更好的答案出现,否则我将接受这个答案。 - mrts
这个指南不仅仅是一件好事。经过几次合并和收购,我们公司内部出现了4个不同的顶级命名空间。虽然它们不在同一个项目中,但公共工具很难被发现。Resharper对此有很大帮助。 - adrianm

3

如果您真的想不出任何其他方法,最简单的解决方法是调用名称空间 Robots


2

根据框架设计准则中的命名空间名称,命名空间应该采用以下格式:

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

因此,既然这里的“公司”是Hubot的开源项目团队,而其他类别都不适用于这里,那么对于您的示例,它可能是以下内容:

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

使用方法如下:

Hubot.Robot robot = //...;

0

这取决于命名空间中包含的内容。命名空间必须描述其中的内容。如果您有一堆机器人类,那么将其命名为Robots是一个好主意。如果您有一个机器人和机器人零件,则可以将其命名为RobotEntities、RobotParts、Machine等。

也许您的Robot类没有正确命名,也许它是一个BaseRobot或EnemyRobot等。


-2

另一个可能的想法是将namespace使用小写字母。

虽然这不常见,但有时会为命名空间使用这样的名称。即使它不符合命名指南,整个情景也不符合CompanyName.TechnologyName[.Feature][.Design]标准。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接