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

问题描述 投票:25回答:8

我正试图创建一个通用的库结构。我正在通过为每个我想要的通用库创建单独的项目来实现。

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

我需要它们都有一个名为 Utilities 并成为静态类。如果我这样做,我就需要在我的静态类之前指定完整的命名空间名称,以便访问它。

有没有其他更好的方法?

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

c# .net projects-and-solutions
8个回答
42
投票

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

不,没有必要,尽管细节取决于将使用这些类型的类和...。using 宣言 它有。

如果你只用 一个 的名字空间,就不会有歧义,你可以继续使用该类型。

如果你同时使用这两个命名空间,你将不得不完全限定这些用法,或者使用namespacetype 别名 来消除类型的歧义。

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

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

20
投票

没有其他方法。你可以在 using 指令。

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

这是最简单的管理方式。


12
投票

MS指南 有以下几点要说。

不要引入通用类型名称,如元素、节点、日志和消息。很有可能会导致常见场景下的类型名冲突。

不要在一个应用程序模型中给命名空间中的类型起相同的名字。

我同意,最好是使用 BarcodeUtilitiesErpUtilities 来代替。(除非这些实用类不打算被客户端代码使用,在这种情况下,你可以将它们命名为 Utilities 并使之 internal.)


7
投票

"Utilities "不是一个很好的类名,因为它太笼统了。因此,我认为你应该把它们两个都改名为更有意义的名字。


3
投票

你可以使用一个别名。

using BarcodeUtils  =  MyCompany.Barcode.Utilities;

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


1
投票

我建议使用不同的类名。 如果你真的想把它们两个都叫做Utilities,那么你可以在使用指令中使用别名功能,如

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

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

0
投票

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

你可以在使用指令中使用 别名 然而,这将节省你一些打字。

using Project = PC.MyCompany.Project;

我想换一个更有描述性的名字。 I would go for a different name that's somewhat more descritive. A


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.