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

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

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

例如,我有一个Utils类,它有一个Diagnostics (主要是debug utils)类和一个Drawing类。 我可以:

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

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

编辑:

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

在实践中,这意味着:
"Drawing" :吸引人的东西。
"MyCustomControlDrawing"MyCustomControl上绘制的东西。 例如: "WidgetDrawing"

EDIT2:

下一次看看的另一个解决方案: 扩展方法 ( Lawmower提供 )。

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

 using Type = MyReallyCoolCustomReflector.Type; 

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

 System.Type sysType = anObject.GetType(); 

一般来说,我试图避免名称重复,但这并不总是这样。 我也喜欢简单,可读和可维护的代码。 因此,通常这是一个权衡决定。

我没有看到保持名称DrawingDiagnostics等的任何问题。这是名称空间的目的之一,用于解决命名冲突。

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

 using MyAlias = My.Custom.Namespace; 

这将使你的课程与微软的课程分开。

然后你可以引用你的课程

 MyAlias.Diagnostics 

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

对我而言,故意编写冲突的类名真的不值得。 您会混淆其他不熟悉您的代码库的开发人员,因为他们期望使用BCL类,但最终会使用您的代码库(反之亦然)。 然后,当他们必须using别名编写特定内容时,您只是浪费时间。

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

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

好吧,如果你想避免命名空间冲突,你可以做几件事:


  • 不要碰撞,而是选择一个唯一的名称。

例:

如果您要创建Math类,可以将其命名为CamiloMartin.MathHelper


  • 使用long命名空间来区分collissions。

例:

 public class MyClass { public int SomeCalculation(int a, int b) { return MyNamespace.Math.SomeFunc(a, b); } } 

  • 使用别名来区分。

例:

 using System.Math; using SuperMath = MyNamespace.Math; namespace MyNamespace { public class MyClass { public int SomeCalc(int a, int b) { int result = Math.abs(a); result = SuperMath::SomeFunc(a, b); return result; } } } 

仅供记录:.NET框架既没有Utils也没有Diagnostics类。 (但是有System.Diagnostics命名空间。)

我个人不喜欢像Utils这样的通用类,因为它们的方法不是很容易被发现(通常要么太一般或太具体),所以我认为它们只能用于内部类。

至于其他方面 – 我同意其他人的说法,名称空间很方便。 (虽然如果System已经有一个具有相同名称的类,我会想三次命名该类,而不是因为名称冲突,而是因为我不能使用’原创’类的原因可能意味着我我即将创造的语义不同。)

通常可以选择更具体的名称。 以Utils为例。 绝对一切都可以被称为实用。 对于代码的读者来说,这个类名是毫无价值的。

实用程序类通常是一组不适合其他任何方法的方法。 尝试将它们放在它们所属的位置,或按某些条件对它们进行分组,然后将该组用作类名。 根据我的经验,这种分组总是可行的。

一般来说:

  1. 这就是我们正在做的事情(嘿,我们可以稍后重构)

  2. 使用它一次或两次,但仅限于重要的类。 如果你还不知道’完美’这个名字,那就特别有用。

  3. 甚至不考虑这个……

使用命名空间别名并不好玩。 如果可以的话,我会避免它。