Foros del Web » Programación para mayores de 30 ;) » .NET »

herencia y polimorfismo de operadores .NET

Estas en el tema de herencia y polimorfismo de operadores .NET en el foro de .NET en Foros del Web. Supuesto: Tengo una clase Animal de la que heredan: Cerdo, Pato, Ganso. Y una interfaz: IComidaAnimales. Entonces me gustaría generalizar los operadores > y < ...
  #1 (permalink)  
Antiguo 29/06/2012, 06:09
 
Fecha de Ingreso: junio-2012
Mensajes: 1
Antigüedad: 11 años, 9 meses
Puntos: 0
herencia y polimorfismo de operadores .NET

Supuesto:

Tengo una clase Animal de la que heredan: Cerdo, Pato, Ganso. Y una interfaz: IComidaAnimales.

Entonces me gustaría generalizar los operadores > y < para poder decir:

Código:
Dim peggy as Cerdo

Dim babe as Cerdo

If babe>peggy Then

  msgbox("babe come más que peggy")

Else

  msgbox("peggy come más que babe")
Y así análogamente con las demás clases sin tener que reescribirlo en todas, puesto que comer más o menos no depende de los atributos de cada animal, sino de que uno sea más glotón que otro...

Entonces la pregunta es: ¿Existe en vb.NET un mecanismo para de alguna manera generalizar el operador a todas las clases que heredan de Animal?

Lo digo porque en general los operadores han de declararse como shared y en este contexto no se puede heredar...

Ideas??
  #2 (permalink)  
Antiguo 30/06/2012, 14:58
Avatar de MaLkAvIaN_NeT  
Fecha de Ingreso: marzo-2005
Ubicación: trujillo
Mensajes: 141
Antigüedad: 19 años
Puntos: 0
Respuesta: herencia y polimorfismo de operadores .NET

para heredar utilizas "inherits", heredarás todas las propiedades publicas que tengas declaradas, puedes declarar un propiedad como "readonly" si quieres que sea de solo lectura, puedes trabajar con metodos overload y no overload para las sobrecargas.
__________________
www.tecfactory.com
  #3 (permalink)  
Antiguo 30/06/2012, 20:50
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años
Puntos: 344
Respuesta: herencia y polimorfismo de operadores .NET

Buenas,

Tu puedes crear una sobrecarga para un operador y ésta se usará para todas las clases que deriven de ellas, a no ser que definas una sobrecarga de operador para una clase concreta hija.

Código vb:
Ver original
  1. Shared Operator >(ByVal animal1 As Animal, ByVal animal2 As Animal) As Boolean
  2.         Return animal1._hambre > animal2._hambre
  3.     End Operator
  4.  
  5.     Shared Operator <(ByVal animal1 As Animal, ByVal animal2 As Animal) As Boolean
  6.         Return animal1._hambre < animal2._hambre
  7.     End Operator

Imagínate que defines estas sobrecargas, tu luego puedes hacer:

Código vb:
Ver original
  1. Dim cerdo = New Cerdo
  2.         Dim ganso = New Ganso
  3.  
  4.         cerdo.Hambre = 50
  5.         ganso.Hambre = 10
  6.  
  7.         If (cerdo > ganso) Then
  8.             Console.WriteLine("El cerdo tiene más hambre que el ganso")
  9.         Else
  10.             Console.WriteLine("El ganso tiene más hambre que el cerdo")
  11.         End If

Y puedes porque tanto Cerdo como Ganso son Animales.

Espero que eso responda a tu pregunta.

Saludos.

Etiquetas: herencia, net, operadores, polimorfismo, vb
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:35.