Herencia

16/11/2005 - 19:22 por Silviall | Informe spam
Hola a todos,

Estoy creando controles mediante herencia. Tengo uno control base y un
control para oracle y otro para sqlserver. El problema viene cuando declaro
la variable da (OracleDataadapter o SqlDataAdapter), ya que no puedo
declarar la variable en la base y tengo que declararla en las subclases.
Pero a lo mejor tengo un metodo en la clase base que utiliza esta variable
que en la clase base la declaro como Object y en las subclases hago un
shadows al tipo. Pero en este método este objeto no tiene nada es nothing
cuando estoy ejecutando la aplicación y el metodo no esta implementado en la
subclase y salta a la implementación de la clase base? Qué hago mal? Estos
métodos los tengo que pasar dentro de las subclases??

Saludos,

Sílvia.
 

Leer las respuestas

#1 Tristan
16/11/2005 - 22:24 | Informe spam
Silviall, en realidad yo te recomendaría no definir en la base el objeto
como Object sino como DbDataAdapter. Todos los objetos de tipo DataAdapter
han de ser necesariamente de esa clase común. DbDataAdapter dispone de casi
todos los miembros necesarios para manipular el DataAdapter de forma
genérica, sin necesidad de especializar.

En cuando a Shadows, hay que tener mucho cuidado con esa clausula, puesto
que sólo está prevista como parche. Shadows esconde miembros de la clase
base sólo cuando se accede desde la clase que la implementa o descendientes,
pero no los esconde cuando se accede desde una clase base (polimorfismo).
Shadows está pensado para dar a los herederos la posibilidad de cambiar
aspectos de la clase base, pero sin afectar a las aplicaciones antiguas que
esperan el comportamiento antiguo.

No sé si me explico por que es un poco enrevesado. Espero explicarlo mejor
con un ejemplo:

Imagina que tienes una clase derivada de TextBox, TuTextBox. En esta
reintroduces (no sobreescribes) la propiedad Text, mediante Shadows, de
forma que devuelva el texto "Shadows".

TuTextBox tb1 = new TuTextBox();
TextBox tb2 = tb1 'tb1 y tb2 apuntan al mismo objeto
tb2.Text = "Propiedad original";
msgbox(tb1.Text) '<= Muestra "Shadows".
msgbox(tb2.Text) '<= Muestra "Propiedad original".


Juan Carlos Badiola
MVP - C#

Preguntas similares