Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 不同名称空间中的相同类名_C#_.net_Naming Conventions - Fatal编程技术网

C# 不同名称空间中的相同类名

C# 不同名称空间中的相同类名,c#,.net,naming-conventions,C#,.net,Naming Conventions,我有两个不同的名称空间,有许多同名的类。我相信一些代码会使它更容易理解: namespace Print.Pdl.PostScript.Operators { public abstract class BaseOperator : IOperator { // ... } } namespace Print.Pdl.Pcl6.Operators { public abstract class BaseOperator : IOperator

我有两个不同的名称空间,有许多同名的类。我相信一些代码会使它更容易理解:

namespace Print.Pdl.PostScript.Operators
{
    public abstract class BaseOperator : IOperator
    {
         // ...
    }
}

namespace Print.Pdl.Pcl6.Operators
{
    public abstract class BaseOperator : IOperator
    {
         // ...
    }
}
基本实现是相同的,因为PostScript和PCL具有相似的结构。因此,这两个名称空间最终对几个类具有相同的名称

我很想做以下事情

namespace Print.Pdl.PostScript.Operators
{
    public abstract class BasePsOperator : IPsOperator
    {
         // ...
    }
}

namespace Print.Pdl.Pcl6.Operators
{
    public abstract class BasePclOperator : IPclOperator
    {
         // ...
    }
}
。。。但是,嗯,这有点违背了目的,因为身份识别中存在冗余。如果名称空间已经创建了逻辑屏障,为什么我要在类名称前面加前缀/更改它们

你们这些人怎么想?我应该保留相同的名称,因为它们在不同的名称空间中,还是应该为类名添加前缀/更改名称,以便更容易识别源代码,并避免冲突(如果有人希望同时使用这两个名称空间)


谢谢

如果两个提议的基类之间没有功能或接口上的差异,那么可能会创建另一个通用名称空间,其中包含BaseOperator,只需定义一次即可。

在我看来,这是一个棘手的问题。要很好地回答这个问题,您需要知道人们可能同时使用这两个名称空间的频率,他们对必须在所有东西前面加上名称空间感到多么恼火

我个人倾向于使用“不同的名字”。我认为名称空间是一种限制代码中可见的名称集的机制,是一种防止名称冲突的保护措施,即使在这个缩减的集合中也不太可能发生。因此,保持冲突“不太可能”很重要。因此,我个人不会故意设计冲突


特别是在您的情况下,差异非常小:
BaseOperator
只比
BasePsOperator

稍短一点,如果您尝试避免重复类名,那么维护代码的开发人员将非常感激。很难一目了然地说出正在使用什么类。

我的意见是,您应该使用反映专业化的命名方案

我的意思是,你不需要考虑它是前缀、后缀还是其他。只需写下可以清楚识别类的名称

老实说,我相信名称空间不会回答正确的类命名方案,因为名称空间是一种组织性的东西,而类是程序的一部分

因此,在今天结束时,我会选择您的第二个选项:名称空间和类的专门命名

我认为你不应该为了可读性而牺牲架构。我相信如果保持相同的类名会更直观,因为如果从PCL切换到PostScript,则会更简单,反之亦然

如果必须在同一代码文件中使用这两个类,请为命名空间创建别名。可以非常清楚地看到:

using Pcl = Print.Pdl.Pcl6.Operators;
using PostScript = Print.Pdl.PostScript.Operators;
...
// use PCL
Pcl.BaseOperator.DoSomething();
// Use PostScript
PostScript.BaseOperator.DoSomething();
谢谢,
Luciano Bargmann

不同的名称空间只是不同的名称空格,因此(通常)您不必担心跨命名空间边界的重复名称

然而,你应该注意使用。e、 g.如果您正在创建一个具有许多不同层(在不同的名称空间中)的分层应用程序,则不希望复制可能在层之间共享的类名

如果您觉得在名称空间之间使用重复命名是明智的,那么您可以始终使用方便的using语句在使用类中重命名,例如

您有两个用户类:

Data.Entities.User;
App.Core.User;
想在同一个地方使用它们

您可以使用一个简单的using语句,例如

using HttpUser = App.Core.User; 

为其中一个别名,从而避免完全限定,并避免任何混淆

这实际上取决于名称空间中的类在同一个类中实例化的频率。如果这种情况不经常发生,那么给他们起相同的名字就可以了。另外,请记住,您并没有完全坚持您的决定:Visual Studio提供了一些不错的重构工具,如果您以后改变主意,这些工具将帮助您重命名类,我是否应该让程序员使用Print.Pdl.PostScript.Operators=PsOps而不是更改名称?请记住,上面只是一个例子:有几个类具有相同的名称。@Charlie好吧,几乎-这取决于您同时“使用”两个名称空间的频率。即使您只实例化Ps.运算符,同时使用Ps和Pcl名称空间也会迫使您写出带有名称空间的“运算符”。@Ricardo是的,但这会降低代码的可读性。程序员一叫它
PsOps
,程序员二叫它
Ps
。因此,文件1具有
PsOps.Operator
,文件2具有
Ps.Operator
。这不利于可读性。@Tim事实上,它们在不同的上下文中是一样的。:)这是一个很好的建议,但事实并非如此-这些类在语义上是相似的,因为PostScript和PCL6具有相似的结构,但它们的行为差异足以使单个类不实用。我也喜欢别名。也许不同的开发人员会对这些名称空间使用不同的别名?对但我不认为这是一个重大的可读性问题。至于在同一个文件中使用两个名称空间,这也不应该是一个问题,因为这会产生一个错误,告诉BaseOperator是不明确的。我有点同意,但这真的是一个“架构问题”吗?课程的工作方式不会改变,也不会改变它们与其他课程的关系。只是名字变了。我真的应该担心吗?这个问题真的有答案吗?还是口味的问题?