使用继承作为命名约定

Using inheritance as a naming convention

我想知道继承的用例。具体来说,我在 C# 中有一个情况,我有一个 Axis class,您可以在其中为 class 指定一个字符串名称,以及其他属性。所以你可以写 (new Axis(“X”)) 来创建一个名为 X 的轴。

因为通常您会想要创建 X、Y 和 Z 轴,所以我倾向于创建名为 X、Y 和 Z 的三个轴的子class,每个子轴在构造函数中指定什么轴名称是。

目前 Axis class 中没有很多代码,因此代码重用非常少(当然这可能会改变)。公平地说,编写 (new Axis(“X”)) 而不是 (new X()) 也没有那么麻烦。

无论如何,我想知道这样写代码是否有任何缺点,或者这样写代码是否不常见。非常感谢!

就像 Damien 提到的那样,如果只是为了简化创建它们,那么使用助手 method/property 来创建它们可能是一个更好的主意。

public class Axis
{
    public Axis(string name)
    {
        Name = name;
    }

    public string Name { get; }

    public static Axis X { get; } = new Axis("X");

    public static Axis CreateX() => new Axis("X");
}

如果你有 属性,你需要确保 Axis 是不可变的。您总是可以 return 在 属性 中添加一个新的,但这不是 属性 应该做的。

我觉得这取决于你要用这个值做什么:

  • 将其用作标题:我可以想象一个图表(您正在创建图表吗?)用 x-axis 来表示 timestring 构造函数参数在这里非常好,即使您决定 总是 命名 x-axis "X".
  • 用它来识别轴:如果代码的其他部分主动寻找 "X" 轴,您可能需要使用枚举,即 AxisType.X.
  • nothing:如果应用程序不依赖于此值,也许您可​​以改用 "anonymous axes",并省略参数?

除非每个子类都有与其他子类不同的行为,否则我不会创建子类。

考虑以下问题。

  1. 通常认为 x 和 y 的变量名是不良做法。像这样的名称让其他开发人员无法深入了解变量的性质及其用途。同样的原则也应该用于 class 命名。创建名为 x 和 y 的子 classes 不是很有用的名称。我会依靠像 xAxis 和 yAxis 这样的名称来帮助提供清晰度。
  2. 您的 XYZ 坐标是否具有不同的属性,或者会被针对每种类型的不同方法调用?如果不是,为什么要使用不同的类型。 sub classes 将不等同或互换。因此,您计划将它们互换使用的任何地方都可以参考基数 class any 或在代码中有多个版本来处理每种类型。
  3. 如果您只是想简化 class 的实例化,我会提醒您不要这样做,除非您受到某种大小限制。