【问题标题】:What are the guidelines for avoiding namespace and type name conflicts in C#? [closed]在 C# 中避免命名空间和类型名称冲突的准则是什么? [关闭]
【发布时间】:2013-09-13 18:11:25
【问题描述】:

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

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

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

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

【问题讨论】:

  • 命名空间Robots。另请参阅:System.Collections 和 BCL 中的许多其他示例。
  • (另外,投票结束,因为这保证是一次民意调查。名称是任意的,选择一个对您有意义且有效的名称。)
  • @millimoose,我不同意这是一项民意调查。我想收集基于合理推理的现实、合理的约定。
  • 阅读框架设计指南。
  • @mrts 您判断答案有效性的标准是什么。除了“编译”和“不编译”之外,您希望如何判断特定约定是否更可取?有了明确的标准,它确实可以归结为个人意见,没有任何事实/参考/专业知识/等。

标签: c# namespaces


【解决方案1】:

准则非常明确: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 的描述性很好。

【讨论】:

  • 谢谢!这就是我一直在寻找的方向。我有类似的模糊感觉,但无法确定命名空间应该命名通用技术域。我会接受这个作为答案,除非出现更好的结果。
  • 指南不仅是一件好事。经过几次并购后,我们最终在公司内拥有了 4 个不同的顶级命名空间。当然不在同一个项目中,但常见的实用程序并不容易发现。 Resharper 有很大帮助。
【解决方案2】:

如果您实在想不出任何办法,最简单的解决方法是调用命名空间Robots

【讨论】:

    【解决方案3】:

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

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

    因此,由于此处的“公司”是 Hubot 的开源项目团队,并且实际上其他类别均不适用于此处,因此对于您的示例,它将类似于:

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

    而且用途是

    Hubot.Robot robot = //...;
    

    【讨论】:

      【解决方案4】:

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

      也许您的 Robot 类没有正确命名,也许它是 BaseRobot 或 EnemyRobot,...

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-11
          • 2013-12-11
          • 2013-03-17
          • 1970-01-01
          相关资源
          最近更新 更多