C# 我是否应该使用与.NET BCL';谁的名字?
这种情况对你们中的一些人来说可能并不完全罕见:您有一些功能可以放入一个类中,但该类的完美名称(*)是由C# 我是否应该使用与.NET BCL';谁的名字?,c#,vb.net,naming-conventions,classname,fully-qualified-naming,C#,Vb.net,Naming Conventions,Classname,Fully Qualified Naming,这种情况对你们中的一些人来说可能并不完全罕见:您有一些功能可以放入一个类中,但该类的完美名称(*)是由系统命名空间中的一个类或其他不是您的但您正在使用/导入的命名空间/类所采用的 (*)我所说的完美是指小而简洁、清晰的名字 例如,我有一个Utils类,它有一个Diagnostics(主要是调试Utils)类和一个Drawing类。我可以: 有一个DrawingUtils类和一个DiagnosticsUtils类,但这听起来像是糟糕的结构 选择一个同义词表,然后使用一个更糟糕、更长或笨拙的名字,而
系统命名空间中的一个类或其他不是您的但您正在使用/导入的命名空间/类所采用的
(*)我所说的完美是指小而简洁、清晰的名字
例如,我有一个Utils
类,它有一个Diagnostics
(主要是调试Utils)类和一个Drawing
类。我可以:
有一个DrawingUtils
类和一个DiagnosticsUtils
类,但这听起来像是糟糕的结构李>
选择一个同义词表,然后使用一个更糟糕、更长或笨拙的名字,而这个名字仍然没有被随意使用李>
用我的母语而不是英语写类名
问问StackOverflow的聪明人
我认为选项1-3不太可能:(
编辑:
由于我选择的答案并没有明确地解决问题(我也没有),因此我建议面临同样情况的人问问自己:你会经常使用冲突的BCL类/名称空间吗?如果不会,那么让你的名字冲突(就像我在诊断中做的那样)。如果是,请添加限制类/命名空间可能性的单词
实际上,这意味着:
“绘图”
:绘图的东西。
“MyCustomControlDrawing”
:只在MyCustomControlDrawing
上绘制的东西。例如:“WidgetDrawing”
编辑2:
下一次要看的另一个解决方案:(由提供)。对我来说,故意编写冲突的类名是不值得的。您会让其他不熟悉您的代码库的开发人员感到困惑,因为他们希望使用BCL类,但最终会使用您的类(反之亦然)。然后,当他们必须使用别名编写特定的时,你就浪费了他们的时间
老实说,提出有意义的标识符名称是一项有用的技能,但不值得推迟你的发展。如果你不能很快想出好的东西,就接受平庸的东西,继续前进。为这些名称操劳没有什么价值。我敢说,你可以做一些更有成效的事情
编辑:我也不相信“小”是“完美”的组成部分标识符。当然,简洁明了,但如果需要较长的名称来表达特定构造的目的,就这样吧。毕竟我们有intellisense。我认为保留名称绘图,诊断等没有任何问题。这是名称空间的目的之一,用于解决命名冲突。名称空间的美妙之处在于,它们允许您创建具有相同名称的类。当您使用语句将名称空间导入到文件中时,可以为名称空间指定别名
using MyAlias = My.Custom.Namespace;
这将使您的类与Microsoft的类分开
然后,您可以将类引用为
MyAlias.Diagnostics
或者,您也可以为Microsoft的命名空间指定别名,但我不建议这样做,因为这会使其他开发人员感到困惑。使用命名空间来消除您的类与其他命名空间中的类之间的歧义。可以使用完全限定名,也可以使用using语句来告诉编译器您需要什么:
using Type = MyReallyCoolCustomReflector.Type;
现在,如果仍要使用系统命名空间中的类型类:
System.Type sysType = anObject.GetType();
一般来说,我会尽量避免名称重复,但这并不总是这样。我也喜欢简单、可读和可维护的代码。因此,这通常是一个折衷的决定。好吧,如果你想避免名称空间冲突,你可以做以下几件事:
- 不要冲突,而是选择一个唯一的名称
示例:
如果您正在创建一个数学类,可以将您的类命名为CamiloMartin.MathHelper
- 使用长名称空间来区分冲突
示例:
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;
}
}
}
- 使用别名进行区分
示例:
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 framework既没有Utils
也没有Diagnostics
类(但有名称空间)
就我个人而言,我不喜欢像Utils
这样的通用类,因为它们的方法不是很容易发现(通常过于通用或过于具体),因此我认为它们的使用仅限于内部类
至于其他方面,我同意其他人的看法,名称空间很方便。(虽然如果系统
中已有同名的类,我会三思而后行地命名该类,这不是因为名称冲突,而是因为我不能使用“original”类的原因可能意味着我要创建的类在语义上是不同的。)通常可以选择更具体的名称。以Utils
为例。任何东西都可以称为实用程序。对于代码的读者来说,这个类名毫无价值
通常,实用程序类是一组不适合其他任何地方的方法。请尝试将它们放在它们所属的位置,或根据某些条件对它们进行分组,然后使用组作为类名。根据我的经验,这种分组总是可能的
一般而言:
这就是我们正在做的(嘿,我们可以稍后重构它)
用过一两次,但只在重要的类上使用。如果你还不知道“完美”的名字,尤其有用
想都别想这个
使用名称空间别名并不有趣。因此,如果可以的话,我会尽量避免使用它。“L'art pour L'art”-为了艺术而艺术。这就是我对你问题的看法。解决方案1很好,你为什么不应用它呢?我认为在我们的日常工作中还有更重要的问题:p@ukas: