我应该将我的volume方法放在C#中的Shape层次结构中?

时间:2016-07-09 06:23:26

标签: c# polymorphism hierarchy shape

我正在尝试学习多态,我正在构建一个Shape层次结构,其中Shape类有两个子节点,即TwoDimensionalShape和ThreeDimensionalShape。同样,TwoDimensionalShape有Circle,Square为子,ThreeDimensionalShape有Sphere,Cube为子。这是我的代码,直到现在。

public abstract class Shape
    {
    public abstract double area(); 
    }

public abstract class TwoDimensionalShape : Shape
    {
        public abstract override double area();
    }

public abstract class ThreeDimensionalShape : Shape
    {
        public abstract override double area();
        public abstract double volume();
    }

我在TwoDimensionalShape下创建了Circle和Square类,在那里我实现了area方法。我还在ThreeDimensionalShape下创建了Sphere和Cube类,我在其中实现了area和volume方法。在我的主要方法中,我试图这样做。

Shape[] myShapes = new Shape[4];
myShapes[0] = new Circle(4.0);
myShapes[1] = new Square(2.0);
myShapes[2] = new Sphere(8.0);
myShapes[3] = new Cube(6.0);

for (int i = 0; i < myShapes.Length; i++)
{
    Console.Write(myShapes[i].ToString());
    if(myShapes[i] is TwoDimensionalShape)
        Console.WriteLine(" : Area = {0}", myShapes[i].area());
    else if (myShapes[i] is ThreeDimensionalShape)
    {
        Console.Write(" : Area = {0}", myShapes[i].area());
        Console.WriteLine(" : Volume = {0}", myShapes[i].volume());
    }
}

现在我收到一个错误,我的Shape类不包含&#39; volume&#39;的任何定义。那么我在哪里放这个卷方法呢?我想我应该把它放在Shape基类本身,但是volume方法只适用于3D Shapes吗?另外,为什么我会收到此错误?如果myShapes [i]是ThreeDimensionalShape,我只调用volume方法。

那么我的体积法究竟应该在哪里?

0 个答案:

没有答案