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