繁体   English   中英

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

[英]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似乎是最直观的命名约定,但这会导致几个问题。

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

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

我认为绕过这些限制的最佳选择是使用{primitive-type-name}{text-represented-size}Tuple约定。 (例如Int32TwoTupleDoubleTwoTuple )。 该约定明确地表达了包装器 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 ? 听起来不太好。

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

我不太喜欢元组或 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM