命名空间和类名冲突

Posted

技术标签:

【中文标题】命名空间和类名冲突【英文标题】:Namespace & Class name collide 【发布时间】:2014-07-01 15:49:30 【问题描述】:

将类命名为命名空间结尾时的最佳做法是什么?

例子:

    Successful.Domain.Resource 
    public class Resource 
    

    Successful.Data.Resource 
    public class Resources 
    

如果我想在 Success.Data 命名空间中使用 Resource 类,我不能随意引用 Resource。我需要像 Domain.Resource.Resource 一样声明它的命名空间

我使用 Resharper 并在文件夹中构建我的所有代码,这就是我有这样的命名空间,文件夹结构示例:

Successful.Domain(命名空间)

资源(文件夹) Resource.cs ResourceLocation.cs ResourceSettings.cs

Successful.Data(命名空间)

资源(文件夹) Resources.cs

【问题讨论】:

我不确定这是否会有所帮助,但您是否尝试过using Successful.Domain.Resource = Rsrc;?这可能有助于避免名称冲突。我很好奇这是否可行-但不确定(因此尚未将其发布为答案)。 【参考方案1】:

见:Framework Design Guidelines - Names of Namespaces

X DO NOT为命名空间和该命名空间中的类型使用相同的名称。

因此建议使用与命名空间不同的类名。

你也可以看到Eric Lippert:Do not name a class the same as its namespace, Part One的这篇文章

【讨论】:

感谢 Habib 提供的链接,很好地解释了最佳实践。 @Habib 感谢您的链接。看起来 Eric 那个家伙很懂 C# :) @OP 在遵循 Habib 的建议之后,更改文件夹结构以匹配名称空间并不是一个坏主意,除非您的应用程序是 Web 应用程序。 ReSharper 有一个快速修复(也可能是全局修复)来为您执行此操作。【参考方案2】:

不建议命名空间和类使用相同的名称。

在这种情况下,我将命名空间命名为 Resources 注意这是复数,因为命名空间提供了类型的逻辑分组。

类名应该更具体。 Resource 告诉你什么?嗯没事。正确命名你的类,类名应该传达它的作用。换句话说,它应该是不言自明的。在不知道 Recource 是什么的情况下,我想不出一个好名字。

@Habib got it right 有很好的链接,所以我无法为您提供一些有用的链接。

【讨论】:

以上是关于命名空间和类名冲突的主要内容,如果未能解决你的问题,请参考以下文章

如何解决两个不使用命名空间的第三方库之间的类名冲突?

解决ambiguous symbol命名空间中类名变量名冲突的问题

9.类名与命名空间

命名空间和程序集

命名空间

现代PHP-命名空间