我应该使用与.NET BCL名称冲突的(否则是最佳的)类名吗?

Cam*_*tin 10 c# vb.net naming-conventions classname fully-qualified-naming

这种情况对于你们中的一些人来说可能并不完全不常见:你们有一些功能要放在一个类中,但是这个类的完美名称(*)是由System命名空间中的一个类或其他不属于你的命名空间/类所占用的.你在using/ import.

(*)完美我的意思是小巧,简洁和清晰的名字.

例如,我有一个UtilsDiagnostics(主要是debug utils)类和一个Drawing类.我可以:

  1. 有一个DrawingUtils类和一个DiagnosticsUtils类,但这只是闻起来像坏结构.
  2. 选择一个词库并完成一个更糟糕,更长或更尴尬的名字,这个名字随便仍未被拍摄.
  3. 用我的母语而不是英语写下课程名称.
  4. 向StackOverflow的聪明人询问.

我认为选项1-3并不乐观:(

编辑:

由于我选择的答案并没有明确地解决问题(我也不这样做),我建议那些面临同样情况的人要问自己:你会经常使用冲突的BCL类/命名空间吗?如果不是,那么让你的名字发生冲突(就像我在诊断中所做的那样).如果是,请添加一个限制类/命名空间可能性的单词.

在实践中,这意味着::
"Drawing"绘制的东西.
"MyCustomControlDrawing":东西借鉴MyCustomControl.例如:"WidgetDrawing".

EDIT2:

下一次看看的另一个解决方案:扩展方法(由割草机提供).

Mat*_*ott 8

I don't see any issue with keeping the names Drawing, Diagnostics etc. That's one of the purposes of namespaces, to resolve naming conflicts.


Sco*_* M. 6

命名空间的优点在于它们允许您创建具有相同名称的类.使用using语句将别名导入到文件中时,可以为命名空间指定别名.

using MyAlias = My.Custom.Namespace;
Run Code Online (Sandbox Code Playgroud)

这将使您的课程与Microsoft分开.

然后你可以引用你的课程

MyAlias.Diagnostics
Run Code Online (Sandbox Code Playgroud)

或者您也可以为Microsoft的命名空间分配别名,但我不建议这样做,因为它会混淆其他开发人员.

  • 这在实践中很烦人.我总是忘记添加这条线.VS不会使用添加所有其他线路的常规快捷方式自动执行此操作.如果阅读使用别名的代码很容易混淆.如果您需要两个命名空间中的两个类,您的代码都会被Mycompany.myproject.mysubproject.mymodule.MyClass混乱.不用了,谢谢.我宁愿有一个不那么完美的名字. (2认同)

Jos*_*dan 5

对我来说,故意编写冲突的类名真的不值得.您会混淆其他不熟悉您的代码库的开发人员,因为他们期望使用BCL类,但最终会使用您的代码库(反之亦然).然后,你只需要浪费时间来编写特定的using别名.

老实说,提出有意义的标识符名称是一项有用的技能,但不值得推迟开发.如果你不能快速拿出好东西,那就选择一些平庸的事情并继续前进.辛苦工作的名字几乎没有价值.我敢说你可以做更有成效的事情.

编辑:我也不相信"小"是"完美"标识符的一个组成部分.当然,简洁明了,但如果需要更长的名称来传达特定结构的目的,那就这样吧.毕竟,我们有智能感知.


Man*_*red 4

使用命名空间来消除您的类与其他命名空间中的类的歧义。使用完全限定名称或使用语句来告诉编译器您需要什么:

using Type = MyReallyCoolCustomReflector.Type;
Run Code Online (Sandbox Code Playgroud)

现在,如果您仍想使用 System 命名空间中的 Type 类:

System.Type sysType = anObject.GetType();
Run Code Online (Sandbox Code Playgroud)

一般来说,我会尽量避免名称重复,但情况并非总是如此。我也喜欢简单、可读和可维护的代码。因此,这通常是一个权衡决定。