Ocultar métodos y propiedades heredadas

06/08/2004 - 16:32 por Pedro Ayensa | Informe spam
Hola, estoy elaborando un componente que hereda de
System.Windows.Forms.Form, pero quiero prepararlo para que quienes lo usen
sólo tengan acceso a los métodos y propiedades que haya implementado yo,
ocultando todos los demás.
¿Es posible? Gracias.

Preguntas similare

Leer las respuestas

#1 keysao
06/08/2004 - 17:43 | Informe spam
Saludos

Tu pregunta me resulto tan interensante y que en algun
momento seguramente me pudiede pasar a mi mismo este
problema que decide salir de dudas y revizar la
documentancion que viene con el Framework y al parecer
estan bien definidos por los que crearon la clase que
metodos son publicos y cuales son privados y me temo que
no hay mucho que se pueda hacer.

Pienso que desde el momento que una clase hereda de otra
la hija puede por definicion llegar a los metodos publicos
y protegidos de la clase padre y la limitante solo puede
establecerse en la clase padre. Aun cuando puedas
sobreescribir aquellos metodos que sean overrid..
no puedes hacer nada para ocultarlos o al menos a mi no se
me ocurre.



Hola, estoy elaborando un componente que hereda de
System.Windows.Forms.Form, pero quiero prepararlo para


que quienes lo usen
sólo tengan acceso a los métodos y propiedades que haya


implementado yo,
ocultando todos los demás.
¿Es posible? Gracias.


.

Respuesta Responder a este mensaje
#2 Pedro Ayensa
06/08/2004 - 18:06 | Informe spam
Bueno, en este rato se me ocurre que lo correcto sería crear una clase
publica sin herencia y que, internamente, cree un componente de formulario
privado... Es decir, introducir una clase entre el usuario y el formulario,
no se si me entiendes.


"keysao" escribió en el mensaje
news:143c01c47bcc$2fa5b3f0$
Saludos

Tu pregunta me resulto tan interensante y que en algun
momento seguramente me pudiede pasar a mi mismo este
problema que decide salir de dudas y revizar la
documentancion que viene con el Framework y al parecer
estan bien definidos por los que crearon la clase que
metodos son publicos y cuales son privados y me temo que
no hay mucho que se pueda hacer.

Pienso que desde el momento que una clase hereda de otra
la hija puede por definicion llegar a los metodos publicos
y protegidos de la clase padre y la limitante solo puede
establecerse en la clase padre. Aun cuando puedas
sobreescribir aquellos metodos que sean overrid..
no puedes hacer nada para ocultarlos o al menos a mi no se
me ocurre.



Hola, estoy elaborando un componente que hereda de
System.Windows.Forms.Form, pero quiero prepararlo para


que quienes lo usen
sólo tengan acceso a los métodos y propiedades que haya


implementado yo,
ocultando todos los demás.
¿Es posible? Gracias.


.

Respuesta Responder a este mensaje
#3 Tristan
06/08/2004 - 22:30 | Informe spam
Exacto!! Esa es la mejor manera. Encapsula el formulario dentro de otra
clase que no herede de Form.

En realidad en OOP es siempre así, no se puede cortar lo que se hereda,
puesto que rompería principios importantes de la OOP.

Como mucho lo que puedes hacer es esconder las propiedades para que no sean
visibles desde el diseñador. Esto se consigue con el atributo Browsable,
pero desde luego la forma correcta es la que has elegido.

Juan Carlos Badiola
MVP - C#
Respuesta Responder a este mensaje
#4 Paulo Conde
07/08/2004 - 03:22 | Informe spam
Existe otra manera de ocultar miembros de la clase base, y es utilizar el
calificador Shadows, con Shadows puedes redefinir un nuevo miembro en la
clase derivada que oculta el miembro correspondiente de la clase base. En la
definición del miembro puedes modificar el calificador de ámbito siempre y
cuando el nuevo ámbito sea más restringido que el original, es decir no
puedes por ejemplo asignar un miembro Public Shadows en la clase derivada
que sea Protected en la clase base. Creo que esta es la mejor manera de
hacer lo que quieres si deseas aprovechar la herencia, de esta forma puedes
decidir que miembros de la clase base expones en tu nueva clase.

Saludos

Paulo G. Conde M.
+58-416-4721293
+58-273-5412395

Barinas, Venezuela
Respuesta Responder a este mensaje
#5 Tristan
07/08/2004 - 09:45 | Informe spam
Pero shadows no oculta del todo los miembros. Tan solo los oculta de cara a
los descendientes, pero no respecto a los antepasados. Es decir, aunque
escondas el miembro en una clase Form1 siempre se puede acceder a él desde
la clase Form:

Form f = new Form1()
f.CualquierMiembroDeForm

Además habría que hacer shadows una cantidad realmente enorme de miembros.

Sigo pensando que la mejor solución es encapsular el objeto en otra clase
que solo tenga los miembros propios (más los de Object, por supuesto)

Juan Carlos Badiola
MVP - C#
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida