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

C#访问基类数组中派生类的值,c#,arrays,class,base,derived,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;

这并不完全是我正在处理的问题,但我希望它能提供一个明确的例子:

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);
我的问题是,当我处理这个数组时,我不能访问除面积和周长以外的值例如:

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

if (ThisArray[1].Sides == 4)
   //This will not compile
我如何从这个数组[1]访问边?如果我做了类似
Shape.Polygon RandomSquare=新的Shape.Polygon(25,20,4)
,但如果它在一组形状中,则不是

<如果我记得正确,这可以通过C++来完成,比如做< BR>
Polygon->ThisArray[1]。边
(我忘了这叫什么),但我不知道如何在C中实现这一点#

如果我不能做我想做的事情,我怎么能绕过这个问题呢


感谢您通读我想说的内容,非常感谢您的帮助。

您应该使用铸造:

(ThisArray[1] as Shape.Polygon).Sides
请注意,您应该确保底层对象实例实际上是多边形,否则将引发异常。您可以使用以下方法进行此操作:

if(ThisArray[1] is Shape.Polygon){
    (ThisArray[1] as Shape.Polygon).Sides
}

谢谢,这就是我要找的,我只是不知道我要找的是什么或者C#中使用的格式。虽然你必须说Shape.Polygon而不仅仅是Polygon。你是对的,因为它是一个内部类。编辑。PS:如果你认为这个答案是正确的,记得接受它;)实际上你应该做什么呢?重新考虑你的设计,在这个设计中,你保留了一系列的形状,但期望有特定的多边形行为。此外,将派生类放在基类中也不是惯用的C#。