命名命名空间

4

我在尝试确定如何恰当地命名我的命名空间时遇到了问题。 我当前的命名空间是:

<CompanyName>.<ProductName>.Configuration

然而,使用“Configuration”会引起冲突:

System.Configuration

让事情变得更糟的是,我还有一个叫做 ConfigurationManager 的类。我知道我可以将其更改为类似以下内容的东西:
<CompanyName>.<ProductName>.<ProductName>Configuration

但这似乎有些冗余。你有什么想法吗?

编辑:此外,我知道在调用任何一个类时,我可以完全限定调用代码,但是使用 System.Configuration 命名空间和 <CompanyName>.<ProductName>.Configuration 命名空间中的类的频率会导致代码很丑陋。

编辑2:提供具体信息:

使用语句:

using System.Configuration;
using SummitConfiguration = SST.Summit.Configuration;

问题代码 Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal);

错误信息 在上述问题代码中,'SST.Summit.Configuration'是一个'命名空间',但它被用作一个'type'。


1
可以使用 Configuration 的缩写形式,例如 Config 吗? - Alexander Kahoun
实际上这也是可能的。我想避免重复使用产品名称,因为它在命名空间中早已提到,但使用缩写可能不是一个坏主意。 - Blake Blackwell
4个回答

11

通常在这种情况下,我会离开Configuration命名空间,并使用别名来访问我的命名空间(而不是完全限定的方式)。例如:

using System.Configuration;
using PC = MyCompany.MyProduct.Configuration;

// ...

string configValue = PC.ConfigurationManager.GetValue("Foo");

这是有道理的,但我在使用System.Configuration.Configuration类时遇到了“mynamespace”是一个“namespace”,但被用作“type”的错误。有什么想法吗? - Blake Blackwell
你需要提供更多的信息 - 如果你发布你的using语句(别名+其他),再加上几行示例调用,我们就可以缩小范围。不过我发布的代码非常有效- 我总是使用它。 - Reed Copsey
你在那里也在使用 "Summit;" 吗?听起来编译器正在找到 "Configuration" 并将其连线到 "Summit.Configuration",这可能是因为使用了 "using Summit;" - Reed Copsey
我也使用命名空间别名,并且在这方面取得了良好的成功。这种方法唯一的问题是,当您可能不需要在所有引用本地Configuration类型而不是System.Configuration类型的其他类中使用命名空间别名时,命名空间别名可能会成为模糊点。突然之间,您的命名变得不一致了。如果这让您感到冒犯,您需要将本地Configuration类本身重命名为其他名称(例如Config)。 - Jordan Parmer

2
做类似这样的事情怎么样:

代码示例:

using System.Configuration;
using MyCompany.MyProduct.ProdConfig

或者

using System.Configuration;
using MyCompany.MyProduct.Config

1

使用 Configuration 命名空间不应该有问题 - 您只需要通过完全限定名称显式引用所需的命名空间即可。虽然有点麻烦,但我认为明确的命名约定比如果您的命名空间中的对象确实涉及配置,则想出不同的名称要好得多。正如其他人建议的那样,您也可以使用别名。


0

这可能对你没有用,但当我遇到这种情况时,我只需重命名我的命名空间和/或类。例如 Config.ConfigManager。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接