none
¿Por que no se pueden agregar objetos que heredan de una clase1 a una lista<> (generalizada) de una clase2 generalizada por la misma clase1? RRS feed

  • Pregunta

  • Hola:

    Para contextualizar:

    tengo esta estructura donde estoy aprendiendo a utilizar la herramienta de generalización de una clase.

    el problema no radica en el uso de la misma, si no mas bien en cuando deseo crear una lista de la clase Cualidad<T> y agregar elementos. La forma en la que agrgo los ya nombreados es: lista.Add(piloto); donde piloto está definido como:

    var piloto = new Cualidad<Piloto>();

    La pregunta "resumen" es la expuesta en el titulo. agradezco su tiempo.

    public class Cualidad<T> where T : Profesion

        {

            public T profesion { get; set; }      

        }

        public abstract class Profesion

        {

            public int cantidadSemestres { get; set; }

        }

        public class Piloto : Profesion

        {

            public Piloto()

            {

                this.cantidadSemestres = 12;

                pilotear();

            }

            public void pilotear()

            {

                Console.WriteLine("pilotenado");

            }

        }

        public class Mecanico : Profesion

        {

            public Mecanico()

            {

                this.cantidadSemestres = 11;

                reparar();

            }

            public void reparar()

            {

                Console.WriteLine("reparando");

            }

        }

        public class Tester

        {

            public static void Emergencia(){

              

                var lista = new List<Cualidad<Profesion>>();   //Lista

                Piloto pp = new Piloto();

                var piloto = new Cualidad<Piloto>();

                var mecanico = new Cualidad<Mecanico>();

                piloto.profesion.pilotear();

                mecanico.profesion.reparar();          

               

                lista.Add(piloto);                       //Aquí es donde deseeo añadir a un piloto que

                                                         //que como ya se ve es una cualidad<Piloto>

                                                         //y por ser piloto una profesio (heredado)

                                                                                           //Si no estoy aplicando mal el concepto debería esto funcionar!!

            }

         

    Gracias.

    lunes, 28 de abril de 2014 22:52

Todas las respuestas

  • Hola.

    Prueba a hacer lo siguiente:

    lista.Add(piloto as Profesion); 

    Otra alternativa es que Profesion pase a ser una interfaz y que cada clase implemente dicha interfaz.

    Saludos.

    martes, 29 de abril de 2014 7:16
  • No funciona!!

    Tengo duda de si es una propiedad de visual estudio (específicamente c#) si el tipo que yo <generalizo> debe ser definido en tiempo de ejecución.  me explico. la clase esta generalizada como <Profesion> correcto, pero cuando yo especifico que la profesión que yo quiero es <Mecanico> esto ultimo se hace en tiempo de ejecución!!

    Por favor corrígeme si estoy mal!! 

    gracias.

    viernes, 2 de mayo de 2014 15:19