static void Main(string[] args) { Circulo c1 = new Circulo(); c1.Radio = 5; c1.DatosCirculo(); // Upcasting IFigura f1 = new Circulo { Radio = 5 }; f1.CalcularArea(); IFigura f2 = new Triangulo { Base = 10, Altura = 9 }; IFigura f3 = new Rectangulo { Base = 4, Altura = 3 }; IFigura[] figuras = new IFigura[] { f1, f2, f3 }; foreach (var figura in figuras) { Console.WriteLine(figura.CalcularArea()); } // Downcasting Circulo c = f1 as Circulo; c.Radio = 5; Console.WriteLine("Datos del circulo"); c.DatosCirculo(); Console.ReadKey(); }
static void Main(string[] args) { Console.Clear(); Figura ofig = null; // este objeto no fue instanciado todavia //Dentro del while->switch, se instanciara en Circulo, Cuadrado, segun la opcion //que se haya elegido. while (true) { Console.Write("\nSeleccione una opcion: \n"); Console.WriteLine("0-Salir"); Console.WriteLine("1-Circulo"); Console.WriteLine("2-Triangulo"); Console.WriteLine("3-Cuadrado"); Console.WriteLine("4-Rectangulo\n"); Console.Write("Opcion: "); //string opcion = Console.ReadKey().ToString(); //Lee hasta la primera letra, pero readKey es char, lo casteo a string string opcion = Console.ReadLine().ToString(); //Otra alternativa //Si uso con Key, el if de abajo no va a funcionar int output; if (int.TryParse(opcion, out output)) { float output2; if (output == 0) { break; } else { switch (output) { case 1: Console.Write("\nIngrese el radio: "); while (true) { opcion = Console.ReadLine().ToString(); if (float.TryParse(opcion, out output2)) { //Circulo circ = new Circulo(output2); ofig = new Circulo(output2); break; } else { Console.Write("Ingrese nuevamente el radio: "); } } break; case 2: Console.Write("\nIngrese la base: "); while (true) { opcion = Console.ReadLine().ToString(); if (float.TryParse(opcion, out output2)) { float baseaux = output2; Console.Write("\nIngrese la altura: "); while (true) { opcion = Console.ReadLine().ToString(); if (float.TryParse(opcion, out output2)) { Triangulo trian = new Triangulo(baseaux, output2); break; } else { Console.Write("\nIngrese nuevamente la altura: "); } } break; } else { Console.Write("Ingrese nuevamente el radio: "); } } break; case 3: Console.Write("\nIngrese el lado: "); while (true) { opcion = Console.ReadLine().ToString(); if (float.TryParse(opcion, out output2)) { //Cuadrado cuad = new Cuadrado(output2); ofig = new Cuadrado(output2); break; } else { Console.Write("\nIngrese nuevamente el lado: "); } } break; case 4: Console.Write("\nIngrese el lado A: "); while (true) { opcion = Console.ReadLine().ToString(); if (float.TryParse(opcion, out output2)) { Console.Write("\nIngrese el lado B: "); float auxLadoA = output2; while (true) { if (float.TryParse(opcion, out output2)) { break; } else { Console.Write("Ingrese nuevamente ladoB: "); } } break; } else { Console.Write("Ingrese nuevamente ladoA: "); } } break; } Console.WriteLine("\n{0} es el Area de la figura\n", ofig.calcularArea()); } } else //Cuando no lo puede parsear { Console.WriteLine("\nIngrese la opcion correcta"); } //Intenta parsear opcion, si lo parsea bien, (convertirlo a int) //el resultado lo devuelve en output, y devuelve true, de lo contrario false } //Console.Read(); }