C#如何解决父类PointVectorBase转子类Vector的隐式转换报错
问题原因
报错是因为CalculateSum方法返回父类PointVectorBase类型,而Add方法要求返回子类Vector类型,C#不支持父类到子类的隐式转换。由于此处CalculateSum返回的this本身就是Vector类型的实例,直接加显式强制转换即可,完全符合保留现有两个类实现逻辑的要求。
修改方案
只需要修改Vector类中Add方法的返回语句即可:
public Vector Add(params Vector[] addends) { return (Vector)this.CalculateSum(addends); }
补充说明:给出的
PointVectorBase类代码中缺少X、Y、Z三个属性的定义,需补充后代码才可正常编译:public class PointVectorBase { // 补充属性定义 public double X { get; set; } public double Y { get; set; } public double Z { get; set; } public PointVectorBase(double x=0 , double y=0 , double z=0 ) { this.X = x;this.Y = y;this.Z = z; } // 原有剩余代码不变 }
修改后运行程序会输出(12, 24, 36),符合向量加法的预期结果。
内容的提问来源于stack exchange,提问作者Ahmed Ha. K
相关产品推荐
相关产品推荐

