如何使命名空间中的类具有与.net类库中另一命名空间的一部分相同的名称

如何使命名空间中的类具有与.net类库中另一命名空间的一部分相同的名称,.net,namespaces,class-library,.net,Namespaces,Class Library,好的…这让我很困惑,所以我将展示一个名称空间和一个单独名称空间中的类 Company.Product.Domain (这表示包含特定于该类的方法的类,我将其命名为“Domain”,以便您可以看到我如何在单独的命名空间中使用相同的名称。) Company.Product.Domain.Data.Contracts (此命名空间将用于WCF服务中使用的所有数据协定) 如果我在Company.Product.Domain类中,并且我尝试使用Company.Product.Domain.Data.Con

好的…这让我很困惑,所以我将展示一个名称空间和一个单独名称空间中的类

Company.Product.Domain

(这表示包含特定于该类的方法的类,我将其命名为“Domain”,以便您可以看到我如何在单独的命名空间中使用相同的名称。)

Company.Product.Domain.Data.Contracts

(此命名空间将用于WCF服务中使用的所有数据协定)

如果我在
Company.Product.Domain
类中,并且我尝试使用
Company.Product.Domain.Data.Contracts
中的类,当我尝试键入此内容时,我将进入
Company.Product.Domain
,并且将不再显示intellisense。这还表明该引用是一个类,而不允许我进入名称空间

我的
Company.Product.Domain
类中引用了
Company.Product.Domain.Data.Contracts

是否可以有一个名称空间
Company.Product
,其中包含一个类,还可以有另一个名称空间
Company.Product.Domain.Data.Contracts
?如果可以,如何实现


谢谢

是的,这是可能的。但是,你应该像避免瘟疫一样避免它。它使一切变得更加复杂

Eric Lippert最近就这个话题写了一系列博客文章。无可否认,这不是同一个问题——他说的是
Foo.Bar.Bar
(其中
Foo.Bar
是名称空间,
Bar
是类)但我相信你会遇到许多相同的问题。事实上,我认为你最终可能会使这些问题比他描述的情况更糟。请不要这样做


您可以别名您的Company.Product.Domain.Data名称空间

因此,在您的域类中,而不是

using Company.Product.Domain.Data;
试试像这样的东西

using myData = Company.Product.Domain.Data;
namespace Company.Product
{
  class Domain
  { ...
    myData::Data.method();
  }
}

我不能肯定intellisense是否会按照您希望的方式运行,但它确实消除了域类与域名称空间之间的歧义。

我实际上采取了避免“双重名称”的方法问题。我没有选择Company.Product.Domain.Domain,而是选择了将类与名称空间分离的方法。因此,在创建第二个名称空间的情况下,我希望其余的数据与我的类位于同一路径中,以便流向使用它的开发人员的流是相同的。而且类结构也将位于同一个p我会读这些,但我之所以这么做是为了避免你说的foo.bar。bar@dwhittenburg:但是为什么要引入更多的歧义呢?如果你把它称为Company.Product.Domain.Domain helper或类似的东西,那么就不会有歧义,你也不需要与这种语言作斗争。我明白,这似乎只是一种变通方法,而不是能够在逻辑结构中构造库。此外,我尝试远离“Helper”对象等,并使用正确的命名约定将对象放在正确的结构中。主要问题是为什么.NET不能区分类和命名空间?