【问题标题】:How to avoid the same name of namespace and class in C#? [closed]C#中如何避免命名空间和类同名? [关闭]
【发布时间】:2017-08-04 08:58:11
【问题描述】:

我知道建议在类和命名空间中使用不同的名称,但有时很难做到。 说起来容易做起来难。当我们因为某种情况需要使用相同的名字时,他们从来没有给我们解决方案。

例如,我需要一个命名空间来定位所有关于配置的类,所以命名空间命名为ABC.Configuration。我不认为这个名字有什么问题。

并且在命名空间下我需要一个类来存储配置,所以它的名字也将是 Configuration。有道理,你不觉得吗?

除此之外,我在命名空间下还有一些其他类,例如 ConfigurationBuilder、ConfigurationManager 等。

更何况在Java中,我们使用的包名"camelCase",以及我们使用的类名"PascalCase"。所以因为命名的大小写,是没有问题的。

那么C#这个场景中的类如何命名呢?


非常感谢。如果我使用Configuration.Configuration,我需要写更多只是因为命名而其他人只是没有命名空间的ConfigurationManager。有点乱。

使用 ConfigurationStore 的想法很好,谢谢。 我认为命名一个类的解决方案是在名称中清楚地识别用法并添加另一个单词。 但是在我的项目中,我需要在某个地方使用Configuration,如果我写ConfigurationStore.Path来读取配置,它看起来很奇怪。 也许我可以使用 IConfiguration 之类的接口来避免命名问题

【问题讨论】:

  • 你可以有一个类型Configuration.Configuration。没有什么能阻止你这样做。
  • C# 允许以全小写 (configuration.configuration) 命名,但更建议将 PascalCase 用于命名空间、类和方法的命名约定。
  • 我尝试使用小写字母。但这是一团糟,因为所有其他库都是 PascalCase。

标签: c# naming


【解决方案1】:

您可以将命名空间命名为 ConfigurationManagement。或者,如果您的班级存储配置,则将其命名为 ConfigurationStore

camelCase 与 PascalCase:告诉您将命名空间命名为类的相同工具是不好的,它会告诉您名称仅在大写上不同的实体也是不好的。

所以找到更好的名字。

【讨论】:

    【解决方案2】:

    命名空间和类使用相同的名称是完全可以的。如果您有 using 指令,则可以将 Configuration 类称为 Configuration.ConfigurationConfiguration。没有混淆。

    如果只是你个人的喜好不喜欢有一个与命名空间同名的类,这里有一些其他的配置名称:

    • Config
    • Configurations
    • Configs
    • ConfigurationManager(仅限类名)

    此外,IDE 可能会通过不同的图标告诉您标识符所指的内容。例如在 Xamarin Studio 中:

    命名空间用{s 标记,而类用Cs 标记。

    【讨论】:

    • 你的编译器会在一些特殊情况下窒息它。只是说。这是完全合法的......直到你达到这一点。然后是身体某个部位的疼痛。第一次就做对更容易,尤其是当您发布 NuGet 包以供其他人使用时,因为他们会遇到问题并且无法轻松更改它。
    • 这就是为什么我指出他 IIDE 会告诉你标识符指的是什么,以防编译器抱怨,以便 OP 可以弄清楚发生了什么。 @nvoigt
    • 我不想使用不同的别名或缩写。在项目中的一种含义。如果我决定在一个地方使用 Config,那么任何地方都会是 Config
    【解决方案3】:

    在 C# 中,两种情况都使用 PascalCase。对于命名空间和类,如果我没记错的话。

    【讨论】:

      【解决方案4】:

      当您可以只拥有 ABC 时,为什么还要拥有 ABC.Configuration?我的意思是,不提长名称会有点混乱。 ABC.Configuration.Configuration,用于访问 Configuration 类,而不是 ABC.Configuration。我宁愿应用后者。

      【讨论】:

      • 如果我只有一节课,我会这样做。其他类呢?把ConfigurationManager、ConfigurationBuilder都放在ABC里?这会是一团糟,你不觉得吗?
      • @HalfLegend 但是会有多少种配置类型呢?三?仅包含三种类型的命名空间似乎有点过多,更不用说这样的命名空间以后可能永远不会扩展。
      • 不完全是。例如,查看 System.Configuration。它有各种配置类或方法。最重要的是,如何命名它取决于您。我对你的建议是尽量保持小。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-08
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      相关资源
      最近更新 更多