使用继承作为命名约定



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

因为通常你想要创建 X、Y 和 Z 轴,所以我倾向于创建三个名为 X、Y 和 Z 的 Axis 子类,每个子类都在构造函数中指定 Axis 的名称。

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

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

imo 这取决于你要用这个值做什么:

  • 用它作为标题:我可以想象一个图表(你在创建一个图表吗?)用x轴来代替时间string构造函数参数在这里完全没问题,即使您决定始终将 x 轴命名为"X"。
  • 使用它来标识轴:如果代码的其他部分主动查找"X" -axis,则可能需要改用枚举,即 AxisType.X
  • 什么都没有:如果应用程序不依赖于此值,也许您可以使用"匿名轴"代替,并省略参数?

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

就像 Damien 提到的,如果只是为了简化创建它们,那么使用帮助程序方法/属性来创建它们可能是个更好的主意。

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 是不可变的。您始终可以在属性中返回一个新的,但这不是属性应该做的。

请考虑以下几点。

  1. 通常认为使用x和y的变量名是不好的实践。像这样的名称不会让其他开发人员深入了解变量及其使用的性质。类命名也应使用相同的主体。创建名为 x 和 y 的子类不是很有用的名称。我会依靠像xAxis和yAxis这样的名称来帮助提供清晰度。
  2. XYZ 坐标是否具有不同的属性,或者将由专门针对每种类型的不同方法调用?如果不是,为什么要使用不同的类型。子类不会等效或互换。因此,您计划将它们互换使用的任何地方都可以引用基类,或者在代码中有多个版本来处理每种类型。
  3. 如果您只是想缩短类的实例化,我会警告不要,除非您受到某种大小限制。

最新更新