none
Como hacer algo como herencia multiple en C# RRS feed

  • Pregunta

  • Existe alguna manera de hacer algo como herencia multiple en c#, necesito que un modelo (modelo de mvc) herede de varios modelos padres.

    Nota. Al ser modelos de MVC no tienen métodos solamente propiedades, esto lo menciono por si existe alguna manera de herencia multiple de solo propiedades.

    Saludos cordiales a todos.


    Roy Sillerico

    martes, 24 de enero de 2017 21:01

Respuestas

  • Únicamente hay herencia múltiple de interfaz, pero no de clase. Esto implica que puedes heredar las declaraciones, pero no las implementaciones.

    De todas formas, es muy raro que necesites que un modelo herede de varios modelos. Si lo necesitas para pasar varios datos a la Vista, lo que se hace es encapsular dentro de una clase varias instancias de las otras clases (declarándolas en su interior como propiedades, en lugar de usar herencia).

    martes, 24 de enero de 2017 21:17
  • >>las dos ultimas son el dilema.

    si el modelo es un problema entonces algo diseñas de forma incorrecta, quizas debas romper alguna herencia y descartarla

    la idea es buscar uan clase base comun a todas de partida y desde esta extender hacia abajo, creo que el arranque en una base compartida en A1 estaria mal

    A2 hereda de A1
    
    B1 hereda de A1
    
    
    BX hereda de A1 (pero contiene las propiedades de A2 y B1)
    
    
    B2 hereda de BX

    de esta forma la base es la misma para todo, pero si tienes que replicar en BX las propiedades de A2 y B1 para lograr la secuencia entonces es el camino


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 25 de enero de 2017 2:22

Todas las respuestas

  • Únicamente hay herencia múltiple de interfaz, pero no de clase. Esto implica que puedes heredar las declaraciones, pero no las implementaciones.

    De todas formas, es muy raro que necesites que un modelo herede de varios modelos. Si lo necesitas para pasar varios datos a la Vista, lo que se hace es encapsular dentro de una clase varias instancias de las otras clases (declarándolas en su interior como propiedades, en lugar de usar herencia).

    martes, 24 de enero de 2017 21:17
  • hola

    la herencia multiple no esta permitida en c#, pero si podrias hacer que un model herede de otro como ser

    public class ModelBase{
    
    }
    
    public class Model1 : ModelBase {
    
    }
    
    public class Model2 : Model1 {
    
    }

    podrias ver de refectorizar los modelos para que las propiedades dependendanen cascada

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 24 de enero de 2017 21:22
  • Gracias por la respuesta Alberto, justo estaba leyendo sobre interfaces, entonces creo que la pregunta del milllon seria:

    si en una interface IXYZ declaro una propiedad: protected string dato {get; set;};, luego en una clase X pongo: public class X : IXYZ, esta clase X ya tendra la propiedad dato sin necesidad de volverlo a definir ni a mencionarlo para nada en la clase X???

    Gracias de antemano.


    Roy Sillerico




    martes, 24 de enero de 2017 21:22
  • Gracias por la respuesta Leandro, en realidad no puedo hacer eso (ya lo pense) ya que por la complejidad de las relaciones de herencia entre varias clases llegue a un punto donde necesito interface multiple, en resumen.

    A2 hereda de A1

    B1 hereda de A1

    B2 hereda de A2

    B2 hereda de B1

    las dos ultimas son el dilema.


    Roy Sillerico

    martes, 24 de enero de 2017 21:27
  • No. En la clase X tienes que volver a escribir la propiedad. Lo de ponerle X:IXYZ solo hace que el compilador arroje un error en caso de que se te olvide escribirla.
    martes, 24 de enero de 2017 21:28
  • Alberto, mmmmm justo temia eso, en realida no serviria de mucho ya que tendria que volver a escribir codigo por cada subclase y esa no es la idea, mmmmm creo que a la larga no podre lograr hacer lo que necesito.

    Roy Sillerico

    martes, 24 de enero de 2017 21:30
  • >>las dos ultimas son el dilema.

    si el modelo es un problema entonces algo diseñas de forma incorrecta, quizas debas romper alguna herencia y descartarla

    la idea es buscar uan clase base comun a todas de partida y desde esta extender hacia abajo, creo que el arranque en una base compartida en A1 estaria mal

    A2 hereda de A1
    
    B1 hereda de A1
    
    
    BX hereda de A1 (pero contiene las propiedades de A2 y B1)
    
    
    B2 hereda de BX

    de esta forma la base es la misma para todo, pero si tienes que replicar en BX las propiedades de A2 y B1 para lograr la secuencia entonces es el camino


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 25 de enero de 2017 2:22
  • Gracias por la respuesta Leandro, justo estaba pensando en rendirme a no utilizar herencia pura y redefinir propiedades iguales en dos clases, en mi caso tomando en cuenta que las clases A1 y A2 son modelos base para todo el sistema, y que las clases B1 y B2 son modelos especificos de cada contexto, entonces obte por quitar: B2 hereda de B1.

    Muchas Gracias Alberto y Leandro, tal vez no aplique sus oluciones peroal leerlas si aumento mi conocimiento.

    Saludos cordiales.


    Roy Sillerico

    miércoles, 25 de enero de 2017 13:29