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

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

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

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

还有其他首选方式吗?

或者我应该在BarcodeUtilsERPUtils等类中寻找不同的名字?

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

不,没有必要,虽然细节取决于将使用这些类型的类和它具有的using声明 。

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

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

 using ERPUtils = MyCompany.ERP.Utilities; using BCUtils = MyCompany.Barcode.Utilities; public void MyMethod() { var a = ERPUtils.Method(); var b = BCUtils.Method(); } 

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

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

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

MS指南有如下说法:

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

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

我同意使用BarcodeUtilitiesErpUtilities可能是一个好主意。 (除非客户端代码不打算使用实用程序类,在这种情况下,您可以将它们命名为Utilities并将其设置为internal 。)

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

您可以使用别名:

 using BarcodeUtils = MyCompany.Barcode.Utilities; 

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

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

 using ERP = MyCompany.ERP; using Barcode = MyCompany.Barcode; ... ERP.Utilities.SomeMethod(); Barcode.Utilities.SomeMethod(); 

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

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

 using Project = PC.MyCompany.Project; 

我会寻找一个更具描述性的不同名称。 一个

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