如何避免为类及其命名空间使用相同的名称,例如Technology.Technology?

我经常在命名空间和该命名空间中的类之间发生命名冲突,并且除了添加随机前缀之外,在首先使用这些名称似乎有意义时,我们想知道处理此问题的最佳实践。

拥有一个Models.Technology命名空间似乎是有意义的,它有许多技术类(即武器,农业,回收技术)和一些相关的接口。 我还决定在技术命名空间中使用一个技术抽象类,所有技术都来自该类。

但是,这迫使我使用这样的代码:

public Technology.Technology research(Technology.Technology tech) {...} 

同样地:

 public Building.Building build(int count) {...} 

顺便说一下,我没有命名我的命名空间技术,因为我在其他地方使用该术语作为可用技术列表的包装器……

没有更准确的指示,当你遇到这个问题时,很难给你一些一般的建议。

但是当你在命名空间中有一个基类时,我会假设你有这个问题,其他类inheritance自它。 如果是这种情况,您可以调用您的类BaseTechnology(基类)或AbstractBuilding(抽象类)或IAnimal(接口)。 这甚至可以让您更清晰,因为您在类型的名称中指定了一些重要的东西。

好吧,无论你的名字是你的名字命名,如ns MyNamespace,还是你命名为c class MyClasse。 我个人赞成命名命名空间,因为它不是你在代码中经常使用的东西。

您还可以使用TechnologyBase或AbstractTechnology来命名与命名空间名称冲突的主要抽象类,这是我建议保持最符合逻辑的命名约定。

一般的警察是命名您的命名空间“实体”或其他东西。

另一个应对,只需在您正在为之工作的公司名称后调用命名空间。

那么Technology.Tech呢?

要么:

HumanBeing.Human

要么:

CocaCola.Coke?

我喜欢做的是有一个简单的规则。 我在哪里使用单词的前两个字母,然后是该单词的最后两个字母,如:

Technology.Tegy

它可能没有任何意义,但因为同样的规则总是适用,这意味着更少的混淆,并且除了那一条规则之外没有必要记住太多。 这只是我的偏好。 我,我自己喜欢看起来神秘的东西,所以如果这不是你的风格 – 那么也许这个答案不适合你。

我希望这有帮助…至少有点…… 🙂