Ric*_*lde 10 .net c# naming-conventions
我有两个不同的命名空间,有很多具有相同名称的类.我相信一些代码会让它更容易理解:
namespace Print.Pdl.PostScript.Operators
{
public abstract class BaseOperator : IOperator
{
// ...
}
}
namespace Print.Pdl.Pcl6.Operators
{
public abstract class BaseOperator : IOperator
{
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
基本实现是相同的,因为PostScript和PCL具有类似的结构.因此,两个名称空间最终都与几个类具有相同的名称.
我很想做以下事情......
namespace Print.Pdl.PostScript.Operators
{
public abstract class BasePsOperator : IPsOperator
{
// ...
}
}
namespace Print.Pdl.Pcl6.Operators
{
public abstract class BasePclOperator : IPclOperator
{
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
...但是,恕我直言,它有点挫败了目的,因为识别中存在冗余.如果命名空间已经创建了逻辑障碍,为什么还应该为类名添加前缀/更改?
那么,你们的想法是什么?我应该保留相同的名称,因为它们位于不同的名称空间中,或者我应该使用前缀/更改类名称以便更容易识别源,并且如果有人想要同时使用两个名称空间,请避免冲突?
谢谢!
Luc*_*ann 16
诺尔德,
我不认为你应该牺牲架构来支持可读性.我相信如果你保持相同的类名,它会更直观,如果你从PCL切换到PostScript,反之亦然.
如果必须在同一代码文件中使用这两个类,请为命名空间创建别名.阅读非常清楚:
using Pcl = Print.Pdl.Pcl6.Operators;
using PostScript = Print.Pdl.PostScript.Operators;
...
// use PCL
Pcl.BaseOperator.DoSomething();
// Use PostScript
PostScript.BaseOperator.DoSomething();
Run Code Online (Sandbox Code Playgroud)
谢谢Luciano Bargmann
Rom*_*kov 10
这是一个棘手的问题IMO.为了更好地回答这个问题,你需要知道人们一次可能同时使用这两个名称空间的频率,以及他们不得不使用命名空间为所有内容添加前缀.
我个人倾向于倾向于"不同的名字".我认为命名空间是一种限制代码中可见名称集的机制,并且防止名称在这个简化集中发生冲突的不太可能发生的事件.所以保持冲突"不太可能"很重要.因此,我个人不会故意设计冲突.
特别是因为在你的情况下,差异是如此之小:BaseOperator只比一点点短BasePsOperator.
不同的命名空间就是这样...不同的, 名称, 空格, 所以你根本不应该(通常)担心跨命名空间边界的重复名称。
但是,您应该注意使用。例如,您正在创建一个具有许多不同层(在不同命名空间中)的分层应用程序,您不希望重复可能跨层共享的类名。
如果你觉得在命名空间之间使用重复命名是明智的,你总是可以使用方便的 using 语句在消费类中重命名,例如
你有两个用户类:
Data.Entities.User;
App.Core.User;
Run Code Online (Sandbox Code Playgroud)
并想在同一个地方使用它们......
您可以使用简单的 using 语句,例如
using HttpUser = App.Core.User;
Run Code Online (Sandbox Code Playgroud)
为其中之一取别名,从而避免完全限定,并避免任何混淆。
如果两个建议的基类之间没有功能或接口差异,那么可以创建另一个包含 BaseOperator 的通用命名空间 - 并且只需定义一次。
| 归档时间: |
|
| 查看次数: |
8012 次 |
| 最近记录: |