【问题标题】:Naming issue in C#C#中的命名问题
【发布时间】:2013-04-20 08:12:02
【问题描述】:

我有一个名为“Core”的命名空间,这是我项目的主要命名空间。

然后我创建了名为“Interface”的新子命名空间,它将包含库的所有 GUI 和 WPF 类。有很多 UserControls 和 Windows ETC 。 同时,我还有另一个名为“Interface”的类,它是一个处理和管理接口命名空间及其功能的静态类。这是为了避免用户\开发人员管理他的软件的 GUI,所以这就是我创建这个静态类的原因。

所以现在我有一个小问题,当调用静态类 Core.Interface 时,编译器没有将子命名空间和静态类分开,因为它们的名称完全相同。

我不想更改他们的名字,所以请不要建议任何新名字。 我只是不知道将 Interface 类移动到 Interface 命名空间中是否更好,或者只是删除子命名空间“Interface”并将所有内容移动到主命名空间“Core”,但这会很混乱,我想要一些严格的顺序在我的项目中。

那你建议我怎么做?

更新: 好的,所以我从这些建议中信服了。在每种情况下,我都会为子命名空间找到新的专有名称。并将静态类保留在主命名空间中的位置,以避免用户定义使用子命名空间只是为了使用它们中的每一个的主静态类。

还是谢谢大家的回答和建议。

【问题讨论】:

  • “我不想改变他们的名字,所以请不要建议和新的名字” - 你应该改变你的名字。您只是在为同名(Core.Interface)既是类又是命名空间而烦恼。你越早明白改名就是答案,这个问题就会越早消失。您不想要更改名称这一事实不会改变问题的性质。不,您不应该将 Interface 移动到 Interface 命名空间:blogs.msdn.com/b/ericlippert/archive/2010/03/09/…
  • Jon ,我不想更改名称,因为我的库中有很多这样的问题,例如 Core.Encoder 和它的静态类 Core.Encoder 等......有 4 种情况这 。我不认为为类或命名空间赋予新名称是真正有顺序的。我正在考虑将每种情况下的“管理器”类移到它的命名空间中,但是用户应该在他的代码中声明使用每个命名空间来使用静态类....
  • @DavidDiamond 尝试将命名空间集中在技术名称上,而不是库中非常明确的部分。在我看来,您有很多名称空间。或者将Core.Encoder 重命名为Core.Encoding 之类的。我会听取 Jon 的建议,调整名称并继续对应用程序进行适当的编码。没有正当理由让这个问题花费太多时间。
  • @DavidDiamond Jon 链接了 Eric Lippert 的一篇关于此的帖子。这是 C# 世界中的两个聪明人,他们提供了合理的建议,所以我至少会考虑一下。我个人会将Core.Interface 命名空间重命名为Core.Interfaces。我个人对我知道是小问题感到困扰,但仍然困扰着我。我为节省自己的时间所做的最好的的事情就是承认并接受一些事情并不理想的事实。所以妥协(在这种情况下通过重命名)并解决更复杂的问题。

标签: c# dll namespaces naming


【解决方案1】:

理想情况下,命名空间和类之间应该有明显的区别。命名空间是包,而类就是该包中的内容。例如,您有一个包含苹果和橙子的篮子,您不会想将篮子称为苹果,对吧。

如果您确实必须保留这些名称,则不要在开头使用“using Core.Interface”引用命名空间,而是在每次使用它们时调用完整的类路径,这样编译器就会知道您使用的是哪一个.

另一种选择是使用 alias,例如 using InterfaceNameSpace = Core.Interface; 并在您想使用子类类并使用静态类的完整路径时使用 InterfaceNameSpace 定义。

【讨论】:

    【解决方案2】:

    将命名空间Interface重命名为Interfaces;由于名称空间通常包含多个类,s 的后缀不会破坏语义,可能会更好。

    【讨论】:

    • 我可能会称它为 UserInterface、Presentation 或类似的名称 - Interface 在 .NET 代码中过于含糊,考虑到 GUI 和语言级界面。
    • @JonSkeet:没错,我完全同意你的看法。答案只是对 OP 的个人建议不想改变它们,这仍然需要改变,但虽然很小..
    • 我为每个案例都赋予了新的名称:Core.Encoding Core.Hosting Core.Tracing Core.Interfacing .. 以“ing”(动词)结尾表示一个子命名空间,其中包含相关的类来实现项目中命名空间的名称。
    • @DavidDiamond:更好,看看 .NET Framework 的命名,你就会有所了解。
    猜你喜欢
    • 1970-01-01
    • 2012-10-13
    • 2016-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-04
    • 1970-01-01
    • 2011-05-26
    相关资源
    最近更新 更多