派生类中的别名属性名称?

时间:2012-04-23 03:25:34

标签: c# design-patterns inheritance properties polymorphism

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

我使用的方法是在Vector类中将x,y和z声明为私有,并将i,j和k设置为public,但使用相同的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_为受保护的双精度数。

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

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

正如你所说,当你开始为课程添加功能时,你会让自己心痛。您认为从这种继承中获得的任何好处最好以语义正确的方式进行。