派生类中的别名属性名称

本文关键字:属性 别名 派生 | 更新日期: 2023-09-27 18:32:00

我正在通过继承我自己的 Point 类来编写自己的 Vector 类。 我在 Point 类中调用 x、y 和 z 的字段,我想在 Vector 类中调用 i、j 和 k。 相同的私有双精度变量支持属性。

我使用的方法是在 Vector 类中将 x、y 和 z 声明为私有,并将 i、j 和 k 设置为公共,但使用相同的 get/setter,如下所示:

这行得好吗,还是我让自己心痛?

public class ptsVector : ptsPoint
{
   private double x { get { return x_; } set { x_ = value; } }
   private double y { get { return y_; } set { y_ = value; } }
   private double z { get { return z_; } set { z_ = value; } }
   public double i { get { return x_; } set { x_ = value; } }
   public double j { get { return y_; } set { y_ = value; } }
   public double k { get { return z_; } set { z_ = value; } }
   // methods elided for clarity
}

请注意,Point 类具有 x_、y_ 和 z_作为受保护的双精度。

派生类中的别名属性名称

我认为

我们需要更多关于您将如何使用这些的信息。如果你不需要将 ptsVector 称为 ptsPoint,那么我会放弃继承。你能说向量是一个点吗?如果不是,那么多态性在这里是不合适的。

撇开这个特殊的例子不谈,我认为无论如何,别名属性都是一个坏主意。它增加了很多复杂性,但没有真正的好处。

我会避免这样做:只是从语义的角度来看,它们是两个不同的概念,一个并没有真正"继承"另一个。 如果有的话,我会说向量包含两个,因为它被定义为从 A 点到 B 点的路径。

正如您所说,当您开始向类添加功能时,您正在为心痛做好准备。 你认为你从这种继承中获得的任何好处最好以语义正确的方式追求。