C# 在派生类中别名属性名?

C# 在派生类中别名属性名?,c#,design-patterns,inheritance,properties,polymorphism,C#,Design Patterns,Inheritance,Properties,Polymorphism,我通过继承自己的Point类来编写自己的Vector类。我在点类中称为x,y,z的字段,我想在向量类中称为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; } }

我通过继承自己的Point类来编写自己的Vector类。我在点类中称为x,y,z的字段,我想在向量类中称为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的路径


正如您所说,当您开始向类添加功能时,您正在为自己设置心痛。您认为从这个继承中获得的任何好处都应该以语义正确的方式来追求。

从技术上讲都可以,但有点混乱。如果我在开发和使用这个类,我会很沮丧,因为有两个属性设置器设置相同的变量。是否有其他(首选)方法来别名属性名称?为什么要重新发明轮子?就我个人而言,如果你想为同一事物取两个名称,让它们都成为getter,并创建一个方法来设置与任何名称都不紧密耦合的值,即创建一个DefineVector(x,y,z)或其他东西。@lukas:我不确定你在说什么。是一个二维向量。我需要一个三维向量。你能说向量是点吗?在某些方面,是的,在其他方面,不是。它只有三个组成部分,就像一个点。但你不能点积和叉积点,只需要向量。如果你从一个点减去另一个点,你得到一个向量。所以,正如我所说,从软件开发的角度来看,定义这条线是模糊的。但是关于向量的文献是指i,j和k,所以我想保持一致,我说打破这种关系,分别开发这些类。如果将来您发现许多重复的功能,那么您可以尝试将公共代码引入公共基类。我同意,vector!=即使它们具有相同的属性,也要注意删除继承关系。我想我的第一次心痛是当我试图把它放在我的point类中时:public ptsVector subtract(ptsPoint otherPt){…}我想从技术上讲,向量被定义为dx,dy,dz(就像在这个例子中),如果两点是路径,向量与原点无关,即向量总是(0,0,0)和(x,y,z)之间的路径