代码之家  ›  专栏  ›  技术社区  ›  Camilo Martin

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

  •  10
  • Camilo Martin  · 技术社区  · 14 年前

    这种情况对你们中的一些人来说可能并不完全罕见:您有一些功能要放在类中,但该类的完美名称(*)是由 System using / import 惯性导航与制导。

    (*)

    例如我有一个 Utils 具有 Diagnostics (主要是调试utils)类和 Drawing 班级。我可以:

    1. DrawingUtils a级 DiagnosticsUtils 类,但这只是闻起来像糟糕的结构。
    2. 用我的母语而不是英语写班级名称。
    3. 问问StackOverflow的聪明人。

    编辑:

    因为我选择的答案没有明确地解决问题(我也没有), 我建议面对同样情况的人扪心自问:您是否经常使用冲突的BCL类/名称空间?如果没有,那么让您的名字冲突(就像我在诊断中所做的那样)。如果是,添加一个单词 类/命名空间的可能性。


    "Drawing" :吸引人的东西。
    "MyCustomControlDrawing" :吸引人的东西 MyCustomControl . 例如。: "WidgetDrawing" .

    编辑2:

    下次再看另一个解决方案: Extension Methods Lawnmower ).

    7 回复  |  直到 7 年前
        1
  •  4
  •   Manfred    14 年前

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

    using Type = MyReallyCoolCustomReflector.Type;
    

    现在,如果仍要使用系统命名空间中的类型类:

    System.Type sysType = anObject.GetType();
    

        2
  •  8
  •   Matthew Abbott    14 年前

    我认为保留这些名字没有任何问题 Drawing Diagnostics 这是名称空间的目的之一,解决命名冲突。

        3
  •  6
  •   Scott M.    14 年前

    名称空间的美妙之处在于,它们允许您创建具有相同名称的类。可以在使用 using 声明。

    using MyAlias = My.Custom.Namespace;
    

    然后您可以引用您的类作为

    MyAlias.Diagnostics
    

    或者您也可以为Microsoft的命名空间分配一个别名,但我不建议这样做,因为这会使其他开发人员感到困惑。

        4
  •  5
  •   JoshJordan    14 年前

    using 别名。

    老实说,提出有意义的标识符名称是一项有用的技能,但不值得推迟开发。如果你不能很快想出好的东西,就接受平庸的东西,继续前进。为这些名字操劳是没有什么价值的。我敢说你可以做一些更有成效的事情。

    :我也不认为“small”是“perfect”标识符的一个组成部分。当然,简洁明了,但如果要用一个较长的名字来表达一个特定结构的目的,那就这样吧。毕竟,我们有智慧。

        5
  •  1
  •   myermian    14 年前

    如果您想避免名称空间冲突,可以做以下几件事:


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

    例子:

    如果你正在创建一个数学类,你可以命名你的 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;
            }
        }
    }
    
        6
  •  1
  •   Regent    14 年前

    请注意:.NET framework两者都没有 Utils 也不是 Diagnostics 班级(但确实有 System.Diagnostics 命名空间。)

    就我个人而言,我不喜欢像这样的通用课程 因为它们的方法不是很容易被发现(而且通常要么太一般,要么太具体),所以我将证明它们只用于内部类。

    至于其余的——我同意其他人的观点,名称空间很方便(虽然我会三思而后行,如果已经有一个类在 System

        7
  •  1
  •   Stefan    14 年前

    通常可以选择一个更具体的名字。采取 Utils 例如。任何东西都可以称之为实用工具。对于代码的读者来说,这个类名毫无价值。

    通常,实用程序类是一些方法的集合,这些方法实际上并不适合其他任何地方。试着把它们放在它们所属的地方,或者根据一些条件对它们进行分组,然后将组用作类名。根据我的经验,这样的分组总是可能的。

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

    2. 只在重要的课堂上用过一两次。特别有用,如果你还不知道'完美'的名字。

    3. 别想这个。。。

    使用名称空间别名并不有趣。所以我尽量避免。