Ver Mensaje Individual
  #1 (permalink)  
Antiguo 13/01/2012, 18:42
murel
 
Fecha de Ingreso: julio-2010
Mensajes: 26
Antigüedad: 14 años, 4 meses
Puntos: 0
Instanciar un objeto de tipo clases abstracta

Buenas gente.
Viendo este código. Puedo hacer lo que hago en el manejador del evento? Me lo preguntaron en un test y contesté que no porque las clases abstractas no se pueden instanciar pero .... en este caso que instanciamos? la clase abstracta? o la clase que hereda de la abstracta?


Código:
using System;
using System.Windows.Forms;

namespace ClasesAbstractas
{
    
    abstract class FiguraGeometrica {

        public abstract double Area();    
    }


    class Circulo: FiguraGeometrica   {
        private int radio;


        // A read-write instance property:
        public int Radio  {
            get  {
                return radio; 
            }
            set  {
                radio = value; 
            }
        }


        public Circulo(int r) {
            Radio = r;
        }

        public override double Area()   {
            return (double)(Radio*Radio*3.14);
        }

    }


    //calse tirangulo
    class Triangulo: FiguraGeometrica
    {
    
        //propiedades
        private int ladA;
        private int ladB;
        private int ladC;

        //propiedades
        public int LadoA
        {
            get {
                return ladA; 
            }
            set  {
                ladA = value; 
            }
        }
        public int LadoB   {
            get   {
                return ladB; 
            }
            set   {
                ladB = value; 
            }
        }
        public int LadoC {
            get {
                return ladC; 
            }
            set {
                ladC = value; 
            }
        }


        public Triangulo (int a, int b, int c)
        {
            LadoA = a;
            LadoB = b;
            LadoC = c;
        }

        public override double Area()
        {
            double num, mPer;

            mPer = (double)(LadoA+LadoB+LadoC)/2;

            num = mPer*(mPer-LadoA)*(mPer-LadoB)*(mPer-LadoC);

            if (num <= 0 ) {            
                MessageBox.Show("posiblemente el triangulo no exista, intentelo nuevamente"); 
                return 0;
            }
            else
                return Math.Pow(num,0.5);

        }

    }


    class Cuadrado: FiguraGeometrica 
    {
        //atributos
        private int lado;

        public int Lado {
            get {
                return lado; 
            }
            set  {
                lado = value; 
            }
        }

        public Cuadrado(int l)  {
            Lado = l;
        }

        public override double Area()   {
            return Lado*Lado;
        }

    }
}

private void cmdgetAreaCir_Click(object sender, System.EventArgs e)
{
   //Es correcto? diganme que no
    FiguraGeometrica miFigura = new Cuadrado()
           
}
Saludos