如何命名包含几种原始类型的类?

时间:2011-06-07 14:06:00

标签: c# asp.net naming-conventions

我的某些课程有一个命名问题。我需要将一些原始.net类型包装到类中,如下所示。大约有20个这样的课程。

(命名当然是垃圾。只是出于示范目的)

public class Int32Single
{
    public int Value { get; set; }
}

public class Int32Double
{
    public int Value1 { get; set; }

    public int Value2 { get; set; }

}

public class DoubleSingle
{
    public double Value { get; set; }
}

我无法使用通用方法。 我应该如何命名这样的包装类,其中每个类名应该提供必要的信息,包括什么类型的包装?

我也可能有包含混合的primite类型的类。

4 个答案:

答案 0 :(得分:2)

这根本不是一个好主意。您同时拥有Tuple类和标准array,这在任何可能的用例中都更有意义。但是,这不能回答你的问题,所以......

包装器类的最直观的名称将遵循{type-name}Wrapper的惯例,或者例如Int32Wrapper。在您的情况下,包装对象是原始类型,因此将类称为"Tuple"是有意义的。由于您要在类名中指定元组的大小,{primitive-type-name}{size}Tuple似乎是最直观的命名约定,但这会导致一些问题。

  • 用于描述元组的自然语言会产生歧义(例如SingleDouble,因为它们与类型名称冲突)。 (例如DoubleDouble不好)
  • 整数用于命名某些原始类型,因此这可能会导致歧义。 (例如Int322Tuple很糟糕)。

我们无法将大小移动到开头,例如2Int32Tuple,因为整数不是开始类名的有效字符。所以,我认为有两种方法可行。

我认为绕过这些约束最好的办法是使用{primitive-type-name}{text-represented-size}Tuple约定。 (例如Int32TwoTupleDoubleTwoTuple)。这个约定表达了包装类的内容而没有歧义,所以它似乎是一个很好的方法。此外,名称以基本类型名称开头,因此,如果您有很多这些类,则IntelliSense将更容易填写正确的类名,并且它将按字母顺序列在原始类型的旁边。被包裹。

答案 1 :(得分:1)

泛型可以帮助你:

public class WrapTwo<T>
{
    public T Value1 { get; set; }
    public T Value2 { get; set; }
}

public class WrapOne<T>
{
    public T Value1 { get; set; }
}

您是否考虑过Tuple class

答案 2 :(得分:0)

OneInt32TwoInt32sTwoDoubles?听起来不太好。

元组? http://www.dotnetperls.com/tuple

答案 3 :(得分:0)

我不太喜欢元组或数组,因为两者都没有说明它们的用途。好吧,我用它们。但主要是作为类,局部变量或第三方/遗留代码的内部成员。

回到命名。比较:

Tuple<int,int> a = Tuple.Create(10,10);
Int32Double b = new Int32Double(15, 15);
WrapTwo<int> c = new WrapTwo<int>(20, 20);

使用

Point a = new Point(10, 10);
Vertex b = new Vertex(15, 15);

有人可以争辩说,'a'不是变量的好名字(建议使用'pointA'代替)。但我认为它在几何应用的背景下非常好。

不仅类型名称和创建代码看起来模糊不清,还要考虑类型字段名称:

a.X = 20;
b.Value1 = 20;

因此,我认为您需要在应用程序域的上下文中使用一些自我描述类型。