Pregunta sobre herencia de clases

07/09/2008 - 19:52 por Luisa Goicochea | Informe spam
Hola a todos,

Quiero agregar un metodo comun a todos mis controles 'comunes' (mitextbox,
micombobox, mimaskedtextbox, etc.). Cada uno hereda de la clase
correspondiente (textbox, combobox, maskedtextbox, etc.)

Tengo necesariamente que repetir el codigo en cada clase? No hay una forma
de ponerlo en un solo sitio y que sea heredado por todos.

Ejemplo no podria hacer heredar mis clases de otra clase 'micontrol' que
herede de control y contenga el metodo común que quiero poner ?
 

Leer las respuestas

#1 Alberto Poblacion
08/09/2008 - 08:13 | Informe spam
"Luisa Goicochea" wrote in message
news:
Quiero agregar un metodo comun a todos mis controles 'comunes' (mitextbox,
micombobox, mimaskedtextbox, etc.). Cada uno hereda de la clase
correspondiente (textbox, combobox, maskedtextbox, etc.)

Tengo necesariamente que repetir el codigo en cada clase? No hay una forma
de ponerlo en un solo sitio y que sea heredado por todos.

Ejemplo no podria hacer heredar mis clases de otra clase 'micontrol' que
herede de control y contenga el metodo común que quiero poner ?




La solución es *casi* la que has puesto en el último párrafo. Tendrías
que crear una clase "MiTextBox" que herede de TextBox y poner ahí las
funciones comunes a todas tus clases que hereden de TextBox. Estas clases
las harías heredar de MiTextBox y todas tendrían esa función.
Por desgracia, esto no resuelve el caso de que tus clases no hereden de
una misma clase común, por ejemplo, no valdría para añadir esas mismas
funciones a la clase "MiComboBox". Para eso se necesitaría herencia
múltiple, que existe en C++ pero no en C#.
Podrías hacer que todas tus clases implementaran una interfaz común, que
declare esas funciones. Con eso no consigues que todos tus controles las
adquieran automáticamente, pero sí consigues que el compilador te detecte el
error si alguna se te olvida incluirla, y consigues que tengan un
comportamiento similar al de la herencia a efectos de polimorfismo.
Finalmente, una alternativa más, en el caso de que estés usando la
versión 3.0 de C# (Visual Studio 2008), consiste en usar métodos de
extensión. Los defines como métodos públicos estáticos en una clase estática
que herede de Control, y metes esa clase dentro de alcance en tu código (por
ejemplo, con un "using"). A partir de ese momento, todas las clases que
hereden de Control (la base de tu clase estática) "adquieren" esos métodos.
Sin embargo, a diferencia de la herencia, esto solo vale para métodos, pero
no puedes añadir propiedades o eventos a tus clases por esta vía.

Preguntas similares