Polimorfismo

09/11/2004 - 17:20 por JoseM | Informe spam
Saludos amigos,

PRimero gracias por todas las ayudas y atencion prestada
anteriormente.
Tengo un problemilla con la forma de heredar de una clase
base, como puedo hacer para tener algo asi como una clase
abstracta parecida a Object, que permita que sus hijos
sean recibidos en funciones con su tipo.
Antes tenia:
Public Function GeneraEvents(ByVal ctrldata As ObjectData,
ByVal codev As Integer)
DBL.AddParameter("@Z1779", ctrldata.tipoprm,
ctrldata.sizeprm, ctrldata.idcolum)




Pasa que tipoprm es miembro de una clase llamada
textObjectData que hereda solo un atributo de Objectdata y
me manda un error que dice justamente eso que tipoprm no
pertenece a Objectdata, cosa q cambia si lo recibo como
object por ejemplo.
 

Leer las respuestas

#1 Eduardo A. Morcillo [MS MVP VB]
09/11/2004 - 20:16 | Informe spam
Si le pasas un objeto de tipo ObjectData a la funcion solo deberias usar los
metodos que esta clase expone. Esto no significa que no puedas, de ser
necesario, usar metodo usar metodos de subclases o de interfaces
implementadas por el objeto, pero esto debe ser algo que no impida la
ejecucion normal del metodo.

Te funciona con Object porque no estas usando Option Strict On (que deberia
usarse siempre) y entonces la llamada se hace mediante reflection (lo cual
es poco eficiente ya que requiere de muchas comprobaciones hechas en tiempo
de ejecucion).

Las soluciones son varias y dependen de la operacion que realice el metodo.
Por ejemplo:

* Mover tipoprm a la clase ObjectData y entonces hacer la llamada
directamente.
* Chequear si el objeto pasado es de un tipo dado y si lo es realizar un
cast a una variable de ese tipo y realizar la operacion (esto no deberia
afectar la ejecucion del metodo si el objeto no es del tipo).
* Poner los metodos y propiedades usados por el metodo en una interfaz, usar
esa interfaz como parametro del metodo (en lugar de la clase ObjectData) e
implementar esa interface en los objetos.

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo

Preguntas similares