如何在不同的命名空间中处理相同的类名?

时间:2012-11-12 13:58:43

标签: c# .net projects-and-solutions

我正在尝试创建一个通用的库结构。我这样做是通过为我想要的每个常用库创建单独的项目

我有以下两个名称空间: MyCompany.ERP MyCompany.Barcode

我需要他们两个都有一个名为“Utilities”的类,并且是静态的。如果我这样做,那么我需要在静态类之前指定完整的命名空间名称才能访问它。

还有其他首选方式吗?

或者我应该在 BarcodeUtils ERPUtils 等课程中使用不同的名称?

8 个答案:

答案 0 :(得分:34)

  

如果我这样做,那么我需要在静态类之前指定完整的命名空间名称才能访问它吗?

不,没有必要,但细节取决于将使用这些类型的类以及它具有的using declarations

如果您只在类中使用一个命名空间,则没有歧义,您可以继续使用该类型。

如果您同时使用这两个命名空间,则必须完全限定用法,或使用命名空间/类型aliases来消除类型的歧义。

using ERPUtils = MyCompany.ERP.Utilities;
using BCUtils = MyCompany.Barcode.Utilities;

public void MyMethod()
{
  var a = ERPUtils.Method();
  var b = BCUtils.Method();
}

答案 1 :(得分:16)

没有任何其他方式。您可以在using指令中创建别名:

using MC=MyCompany.ERP;
using MB=MyCompany.Barcode;
...
public void Test()
{
  var a = MC.Utilities.Method();
  var b = MB.Utilities.Method();
}

这是管理它们的最简单方法。

答案 2 :(得分:12)

MS guidelines有以下说法:

  

不要引入泛型类型名称,例如元素,节点,日志和消息。在常见情况下,很可能会导致类型名称冲突。

  

不要为单个应用程序模型中的命名空间中的类型指定相同的名称。

我同意使用BarcodeUtilitiesErpUtilities代替可能是个好主意。 (除非客户端代码不打算使用实用程序类,否则您可以将它们命名为Utilities并将它们设为internal。)

答案 3 :(得分:7)

“Utilities”对于一个类来说不是一个非常好的名字,因为它太通用了。因此,我认为您应该将它们重命名为更具信息性的内容。

答案 4 :(得分:2)

您可以使用别名:

using BarcodeUtils  =  MyCompany.Barcode.Utilities;
在你发生冲突的页面上

。但如果在很多地方发生这种情况,最好将它们重命名。

答案 5 :(得分:1)

我建议使用不同的类名。如果你真的想要同时调用它们两个Utilities,那么你可以使用using指令中的别名功能,例如。

using ERP = MyCompany.ERP;
using Barcode = MyCompany.Barcode;

...
    ERP.Utilities.SomeMethod();
    Barcode.Utilities.SomeMethod();

答案 6 :(得分:0)

当两者的名称相同时,您必须使用完整路径。否则你会得到一个模糊的引用错误。

您可以使用alias,但这会为您节省一些打字:

using Project = PC.MyCompany.Project;

我会选择一个更具描述性的不同名称。甲

答案 7 :(得分:0)

这实际上取决于你的课程的目的。如果你要单独分发你的Barcode.Utilities和ERP.Utilies,最好保持这样。另一方面,如果您要在同一个类中使用 only ,则可以使用2.方法来实现代码的简易性。