29

我正在尝试创建一个通用的库结构。我通过为我想要的每个公共库创建单独的项目来做到这一点。

我有以下 2 个命名空间:MyCompany.ERPMyCompany.Barcode

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

还有其他首选方法吗?

或者我应该在类中使用不同的名称,比如BarcodeUtilsand ERPUtils

4

8 回答 8

51

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

不,没有必要这样做,尽管细节取决于将使用这些类型的类及其拥有的using声明

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

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

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

public void MyMethod()
{
  var a = ERPUtils.Method();
  var b = BCUtils.Method();
}
于 2012-11-12T14:03:02.293 回答
22

没有其他办法。您可以在using指令中创建别名:

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

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

于 2012-11-12T14:05:05.410 回答
12

MS指南有以下内容:

不要引入通用类型名称,例如 Element、Node、Log 和 Message。在常见情况下,它很可能会导致类型名称冲突。

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

我同意使用BarcodeUtilitiesand可能是个好主意ErpUtilities。(除非实用程序类不打算由客户端代码使用,在这种情况下,您可以命名它们Utilities并制作它们internal。)

于 2012-11-12T14:34:32.263 回答
8

“实用程序”对于一个类来说不是一个很好的名字,因为它太通用了。因此,我认为您应该将它们都重命名为更具信息性的名称。

于 2012-11-12T14:06:32.857 回答
4

您可以使用别名:

using BarcodeUtils  =  MyCompany.Barcode.Utilities;

在您有冲突的页面上。但如果在很多地方都发生这种情况,最好重命名它们。

于 2012-11-12T14:03:02.410 回答
1

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

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

...
    ERP.Utilities.SomeMethod();
    Barcode.Utilities.SomeMethod();
于 2012-11-12T14:04:49.083 回答
0

当两者命名相同时,您将不得不使用完整路径。否则你会得到一个模棱两可的参考错误。

您可以使用别名,但是这样可以节省一些输入:

using Project = PC.MyCompany.Project;

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

于 2012-11-12T14:03:02.843 回答
0

这实际上取决于您的课程的目的。如果您要分开分发 Barcode.Utilities 和 ERP.Utilies,最好保持这样。另一方面,如果你打算在同一个类中使用它们,你可以使用 2. 方法来简化代码。

于 2012-11-12T14:06:39.817 回答