如何命名一个包装了几个基元类型的类
本文关键字:类型 几个 包装 何命名 一个 | 更新日期: 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
似乎是最直观的命名约定,但这会导致一些问题。
- 用于描述元组的自然语言会产生歧义(例如
Single
和Double
,因为它们与类型名称冲突)。(例如DoubleDouble
坏) - 整数用于某些基元类型的命名,因此这可能会导致歧义。(例如
Int322Tuple
坏)
我们不能将大小移动到开头,例如2Int32Tuple
,因为整数不是类名开头的有效字符。所以,我认为有两种方法是可行的。
我认为绕过这些限制的最佳方法是使用{primitive-type-name}{text-represented-size}Tuple
约定。(例如Int32TwoTuple
或DoubleTwoTuple
)。这个约定表达包装类的内容没有歧义,所以看起来是一个不错的方法。此外,名称以基元类型名称开头,因此,如果您有很多这样的类,您的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
课程吗?
OneInt32
、TwoInt32s
、TwoDoubles
?听起来不太好。
元组?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;
所以,我认为在应用程序域的上下文中需要一些自我描述的类型。