我的某些课程有一个命名问题。我需要将一些原始.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类型的类。
答案 0 :(得分:2)
这根本不是一个好主意。您同时拥有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将更容易填写正确的类名,并且它将按字母顺序列在原始类型的旁边。被包裹。
答案 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)
OneInt32
,TwoInt32s
,TwoDoubles
?听起来不太好。
答案 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;
因此,我认为您需要在应用程序域的上下文中使用一些自我描述类型。