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 ?

Preguntas similare

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.
Respuesta Responder a este mensaje
#2 Alberto Poblacion
08/09/2008 - 09:02 | Informe spam
"Alberto Poblacion" wrote
in message news:
[...] métodos de extensión. Los defines como métodos públicos estáticos en
una clase estática que herede de Control [...]



Perdón, he dicho una tontería: para definir los métodos de extensión no
hace falta que la clase que los define herede de ninguna en especial. La
clase que se extiende se deduce del primer parámetro del método, que se
acompaña de la palabra reservada "this".
Respuesta Responder a este mensaje
#3 Luisa Goicochea
08/09/2008 - 12:58 | Informe spam
Lo voy a chequear. Te agradezco la explicacion, vere eso de los metodos de
extension a ver si lo puedo generalizar asi poniendo "this control" en el
primer parametro y tratar de no necesitar propiedades o eventos.



"Alberto Poblacion"
escribió en el mensaje news:Os$
"Alberto Poblacion" wrote
in message news:
[...] métodos de extensión. Los defines como métodos públicos estáticos
en una clase estática que herede de Control [...]



Perdón, he dicho una tontería: para definir los métodos de extensión no
hace falta que la clase que los define herede de ninguna en especial. La
clase que se extiende se deduce del primer parámetro del método, que se
acompaña de la palabra reservada "this".

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida