2

好的......这让我难以解释,所以我将展示一个来自一个命名空间和一个单独的命名空间的类......

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

Company.Product.Domain.Data.Contracts
(此命名空间将用于 WCF 服务中使用的所有数据协定)

如果我在Company.Product.Domain课堂上并且我尝试使用 中的类Company.Product.Domain.Data.Contracts,当我尝试输入此内容时,我会得到Company.Product.Domain并且不会进一步显示智能感知。它还表明该引用是一个类,而不是允许我进入命名空间。

我的课堂上确实有Company.Product.Domain.Data.Contracts引用。Company.Product.Domain

是否可以有一个名称空间Company.Product,其中包含一个类以及另一个名称空间Company.Product.Domain.Data.Contracts?如果是这样,怎么做?

谢谢

4

2 回答 2

5

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

Eric Lippert 最近就这个主题撰写了一系列博客文章。诚然,这不是完全相同的问题 - 他在谈论Foo.Bar.BarFoo.Bar命名空间在哪里,Bar类在哪里),但我相信您会遇到许多相同的问题。事实上,我认为你最终可能会让它们变得比他所描述的情况更糟。请不要这样做。

于 2010-03-24T20:58:58.637 回答
0

您可以为您的 Company.Product.Domain.Data 命名空间设置别名。

所以在你的 Domain 类中,而不是

using Company.Product.Domain.Data;

尝试类似的东西

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

我不确定智能感知的行为方式是否符合您的要求,但它确实消除了域类与域命名空间的歧义。

于 2010-03-24T21:06:22.140 回答