C# 如何避免类和它同名';的命名空间,例如Technology.Technology?

C# 如何避免类和它同名';的命名空间,例如Technology.Technology?,c#,naming-conventions,namespaces,C#,Naming Conventions,Namespaces,我经常在名称空间和该名称空间中的类之间发生命名冲突,我想知道一种处理这种冲突的最佳实践,除了添加随机前缀之外,如果首先使用这些名称似乎有意义的话 有一个Models.Technology名称空间似乎是有意义的,其中包含数十个技术类(即武器、农业、回收技术)和一些相关接口。我还决定在技术名称空间中有一个技术抽象类,所有技术都从该类派生 然而,这迫使我使用这样的代码: public Technology.Technology research(Technology.Technology tech)

我经常在名称空间和该名称空间中的类之间发生命名冲突,我想知道一种处理这种冲突的最佳实践,除了添加随机前缀之外,如果首先使用这些名称似乎有意义的话

有一个Models.Technology名称空间似乎是有意义的,其中包含数十个技术类(即武器、农业、回收技术)和一些相关接口。我还决定在技术名称空间中有一个技术抽象类,所有技术都从该类派生

然而,这迫使我使用这样的代码:

public Technology.Technology research(Technology.Technology tech) {...}
同样地:

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

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

如果没有更精确的指示,当您遇到此问题时,很难给您一些一般性的建议


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

好吧,无论您是将名称空间命名为那样的nsMyNamespace,还是将类命名为cMyClasse。 我个人倾向于命名名称空间,因为它不是代码中经常使用的东西


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

一个常见的错误是将命名空间命名为“实体”或其他名称

另一种解决方法是,在你工作的公司名称后调用名称空间。

关于Technology.Tech呢

或:

人类,人类

或:

可口可乐,可乐

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

科技

这可能没有任何意义,但因为同一条规则总是适用的,这意味着更少的混乱,并且没有必要记住太多,除了那一条规则。这正是我的喜好。一、 我自己喜欢事情看起来神秘,所以如果这不是你的风格——那么这个答案可能不适合你


我希望这有助于。。。至少有一点…:)

我认为这样做行不通,因为我说的是名称空间的最后一个字。例如:Microsoft.Stuff.Technology。这里的技术与其中的技术抽象类冲突。实际上,您可以/应该在所有名称空间前面加上companyname,但这并不能解决问题。这是一个非常糟糕的主意。名称空间应该用来划分模块——这将完全违背名称空间的目的。你能想象一下,如果微软决定把所有东西都放在
系统中
,我会把你的技术列表重命名为
TechnologyList
,然后选择
技术。技术