调用派生类的非继承方法

伊万巴姆

我有这5个类。一个称为Figura的基类是一个抽象类,另外还有4个具体的派生类。

班级

我必须创建一个大小为8的Figuras阵列(两个Cuadrado,两个Rectangulo,两个Triangulo和两个Circulo),所以我这样做了:

Figuras[] figuras = new Figuras[8];
figuras[0] = new Cuadrado(1);
figuras[1] = new Cuadrado(2);
figuras[2] = new Rectangulo(2, 1);
figuras[3] = new Rectangulo(6, 2);
figuras[4] = new Triangulo(1, 2, 2);
figuras[5] = new Triangulo(3, 3, 4);
figuras[6] = new Circulo(1);
figuras[7] = new Circulo(4);

然后,我遍历数组以计算每个图形的面积和周长。当我尝试调用仅属于图形Circulo的方法calcularDiametro()时,问题就来了。我怎样才能做到这一点?

我尝试了以下操作,但不起作用。

foreach (Figuras f in figuras)
    if (f is Circulo)
        f.calcularDiametro();

任何帮助,将不胜感激。

JLRishe

您需要将其强制转换Circulo为以调用Circulo特定于方法的方法:

foreach (Figuras f in figuras) 
{
    if (f is Circulo)
        (Circulo)f.calcularDiametro();
}

请注意,这有点浪费,因为它会进行两次类型检查(这是一项昂贵的操作)。一种避免浪费的方法是使用as

foreach (Figuras f in figuras) 
{
    Circulo circ = f as Circulo;
    if (circ != null)
    {
        circ.calcularDiametro();
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章