如何命名一个包装了几个基元类型的类

本文关键字:类型 几个 包装 何命名 一个 | 更新日期: 2023-09-27 17:58:30

我的一些类存在命名问题。我需要将一些原始的.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; }
}

我不能对此使用通用方法。我应该如何命名这样的包装类,其中每个类名都应该提供必要的信息,哪些原始类型被包装,包装的数量是多少?

也有可能我有一个包含混合原生岩类型的类。

如何命名一个包装了几个基元类型的类

这似乎不是一个好主意。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将更容易填写正确的类名,并且它将按字母顺序列在要包装的基元类型旁边。

Generics可以在这里帮助您:

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

你考虑过Tuple课程吗?

OneInt32TwoInt32sTwoDoubles?听起来不太好。

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

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

回到命名。比较:

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;

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