[英]How to name a class that wraps several primitive types?
我的一些课程有命名问题。 我需要将一些原始 .net 类型包装到 class 中,如下所示。 大约有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; }
}
我不能为此使用通用方法。 我应该如何命名这样的包装类,其中每个 class 名称应该提供包装的基本类型和数量的必要信息?
我也有可能拥有包含混合 primite 类型的 class。
这似乎根本不是一个好主意。 您拥有Tuple
class 和可用的标准array
,这在任何可能的用例中都更有意义。 但是,这并不能回答您的问题,所以...
包装器 class 最直观的名称将遵循{type-name}Wrapper
的约定,或者例如Int32Wrapper
。 在您的情况下,包装的 object 是原始类型,因此将 class 称为"Tuple"是有意义的。 由于您想在 class 名称中指定元组的大小, {primitive-type-name}{size}Tuple
似乎是最直观的命名约定,但这会导致几个问题。
Single
和Double
,因为它们与类型名称冲突)。 (例如DoubleDouble
不好)Int322Tuple
不好)。 我们不能将大小移动到开头,例如2Int32Tuple
,因为整数不是开始 class 名称的有效字符。 所以,我认为有两种方法可行。
我认为绕过这些限制的最佳选择是使用{primitive-type-name}{text-represented-size}Tuple
约定。 (例如Int32TwoTuple
或DoubleTwoTuple
)。 该约定明确地表达了包装器 class 的内容,因此它似乎是一个好方法。 此外,名称以原始类型名称开头,因此,如果您有很多这些类,您的 IntelliSense 将更容易填写正确的 class 名称,它会按字母顺序排列在原始类型旁边,即被包裹。
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
class ?
OneInt32
, TwoInt32s
, TwoDoubles
? 听起来不太好。
我不太喜欢元组或 arrays,因为两者都没有过多地说明它们的目的。 好吧,我用它们。 但主要是作为类的内部成员、局部变量或使用第 3 方/遗留代码。
回到命名。 相比:
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;
因此,我认为您需要在应用程序域的上下文中使用一些自我描述的类型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.