2012-11-12 63 views
14

我正在尝试创建一个通用的库结构。我对每一个共同的lib创建单独的项目,这样做,我想如何在不同的命名空间中处理相同的类名?

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

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

有没有其他的首选方法呢?

或者我应该去像BarcodeUtilsERPUtils在课堂上不同的名字?

回答

24

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

不,不需要那个,虽然细节取决于使用这些类型的类以及它具有的类型。

如果您只使用一个类中的名称空间,则不会出现歧义,您可以继续并使用该类型。

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

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

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

您可以使用一个别名:

using BarcodeUtils = MyCompany.Barcode.Utilities; 

你有冲突的页面。但理想情况下,如果这种情况发生在很多地方,请重命名它们。

0

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

您可以使用alias然而,将节省您一些打字:

using Project = PC.MyCompany.Project; 

我会去一个不同的名称,这是有点更具描述。 A

1

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

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

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

没有其他办法。您可以在using指令做出别名:

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

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

7

对于一个班级来说,“公用事业”并不是一个很好的名字,因为它太笼统了。因此,我认为你应该将它们重命名为更具信息性的内容。

0

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

7

MS guidelines有以下说:

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

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

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

相关问题