我希望hide the parent class method for the the child class object.
My Circle对象在我访问该方法时向我显示两种方法:
这objShape
是Shape类的对象,它是抽象类.
我想隐藏在第2张图像上显示的方法.
这里Circle类扩展了Oval类,而Oval类扩展了Shape类.
形状类编码
abstract public class Shape { public abstract double Area(double dNum1 = 0.0, double dNum2 = 0.0); public abstract double Perimeter(double dNum1 = 0.0, double dNum2 = 0.0); }
椭圆类编码
class Oval : Shape { public override double Area(double dNum1 = 0.0, double dNum2 = 0.0) { double dAns = Math.PI * dNum1 * dNum2; return dAns; } public override double Perimeter(double dNum1 = 0.0, double dNum2 = 0.0) { double dTmp1, dTmp2, dAns; dTmp1 = 2 * (dNum1 * dNum1); dTmp2 = 2 * (dNum2 * dNum2); dAns = (Math.PI / 2) * Math.Sqrt(dTmp1 + dTmp2); return dAns; } }
圆类代码
class Circle : Oval { public double Area(double dNum1) { double dResult = base.Area(dNum1, dNum1); return dResult; } public double Perimeter(double dNum1) { double dAns = base.Perimeter(dNum1, dNum1); return dAns; } }
那么,在这里我如何隐藏对Circle类对象的Oval类方法的直接访问.在第二个图像中显示建议,我可以使用该方法,但我不想要这个建议,我不想在Circle类对象中使用该方法.
在第二个图像中显示建议,我可以使用该方法,但我不想要这个建议,我不想在Circle类对象中使用该方法.
那么你基本上不应该Circle
从中衍生出来Oval
.不要忘记,拥有一个类型的变量是完全可以接受的,该变量Oval
在执行时具有一个值,引用一个实例Circle
:
Oval x = new Circle(); Console.WriteLine(x.Area(10, 20));
从根本上说,任何对基类有意义的操作对于派生类也应该是有意义的,在一个合理的继承层次结构中.
如果要保留继承层次结构,则应考虑重新设计,使得半径等是对象状态的一部分,而不是作为参数传入.例如:
public abstract class Shape { public abstract double Area { get; } public abstract double Perimeter { get; } } public class Oval { private double Width { get; } private double Height { get; } public override double Area { get { ... } }; public override double Perimeter { get { ... } }; public Oval(double width, double height) { Width = width; Height = height; } } public class Circle { public double Radius { get { return Height; } } public Circle(double radius) : base(radius) { } }