C#访问基类数组中派生类的值

时间:2015-07-14 08:10:17

标签: c# arrays class base derived

这不是我正在使用的内容,但我希望它有一个明确的例子:

public abstract class Shape
{
     public int Area;
     public int Perimeter;
     public class Polygon : Shape
     {
         public int Sides;
         public Polygon(int a, int p, int s){
             Area = a;
             Perimeter = p;
             Sides = s;
         }
     }
     public class Circle : Shape
     {
         public int Radius;
         public Circle(int r){
              Area = 3.14*r*r;
              Perimeter = 6.28*r;
              Radius = r;
         }
     }
}

在主要功能中我会有这样的事情:

Shape[] ThisArray = new Shape[5];
ThisArray[0] = new Shape.Circle(5);
ThisArray[1] = new Shape.Polygon(25,20,4);

我的问题是,当我处理ThisArray时,我无法访问Area和Perimeter以外的值。 例如:

if (ThisArray[0].Area > 10)
   //This statement will be executed

if (ThisArray[1].Sides == 4)
   //This will not compile

如何从ThisArray [1]访问Sides?如果我做了类似的话,我可以访问它 Shape.Polygon RandomSquare = new Shape.Polygon(25,20,4)但不是如果它是一个形状数组。

如果我没记错的话,可以通过做类似的事情在C ++中完成  Polygon->ThisArray[1].Sides(我忘了这个叫做什么),但我不知道C#中的这个怎么做

如果我不能做我想做的事情,我该如何规避这个问题?

感谢您阅读我打算简短的内容,感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

你应该使用cast:

Window

请注意,您应确保底层对象实例实际上是多边形,否则会引发异常。您可以使用以下内容执行此操作:

Shell