Visual Basic.NET - Punteros a funciones

 
Vista:

Punteros a funciones

Publicado por Carlos Escribano Rey (59 intervenciones) el 21/09/2004 12:36:28
¿En vb.net se pueden crear punteros a funciones? Tengo un formulario que muestra u oculta controles en base a parámetros en el constructor. Además, en el constructor se pasa un objeto definido como object, pero que puede ser de varios tipos (de tres clases propias, en concreto). Otro parámetro me dice el tipo de objeto que estoy pasando, por lo que puedo utilizar ctype cuando quiera en función del valor de ese parámetro. Pero paso de programar todos los procesos con SELECT CASE del dichoso parámetro. Si hay que hacerlo, se hace, pero me gustaría utilizar punteros a funciones, inicializarlos en el constructor según el valor del parámetro con las direcciones de las funciones a utilizar en cada caso, y llamar a los punteros siempre, que es más sencillo. O no, quien sabe. Bueno, si alguno de vosotros sabe si existen y cómo debo utilizarlos, le agradeceré una breve explicación.

¡Gracias!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Punteros a funciones

Publicado por Edgar (1501 intervenciones) el 21/09/2004 14:16:21
Hola

Si se puede crear algo parecido a un puntero de función, se llama delegado, y lo creas asi...

'Defines el delegado
Delegate Function ClassCallback() As Color

'Creas una instancia
'and specify the use of the changeColor method.
Dim c As New ClassCallback(AddressOf cbox.changeColor)

'La invocas
Me.TextBox1.BackColor = c.Invoke

Aunque posiblemente la solución a tu problema puede ser más simple si usas interfaces....

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Punteros a funciones

Publicado por Carlos Escribano Rey (59 intervenciones) el 22/09/2004 09:04:45
Muchas gracias, Edgar. La solución que se me presenta ahora es laboriosa, pero mucho más sencilla que antes y menos liosa. De todos modos, me pica la curiosidad por eso que me has comentado de las interfaces. Porque he leido algo en la ayuda de vb, pero no he profundizado y realmente no sé cómo me podrían ayudar. Esto ya es por aprender, ¿me podrías explicar por qué sería mejor usar interfaces y cómo (sin mucho detalle, tampoco hace falta que me des clases particulares, solo una pinceladita)? Gracias!!! :D
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Punteros a funciones

Publicado por Edgar (1501 intervenciones) el 22/09/2004 14:02:28
Hola

Una interfaz es una definición de métodos que debe tener una clase, si has trabajado alguna vez con C, es similar a la definición que haces en los archivos con extensión .h

Básicamente lo que haces con una interfaz ed definir los métodos que esa interfaz va a proveer (sin implementarlo), luego, al crear una clase e indicarle que implementa dicha interfaz, debes crear todos esos métodos que definiste. Al final, es como si hubieses heredado de dicha clase.

En otras palabras, si tu defines una interfaz X, y creas una clase Y que implementa X, puedes hacer lo siguiente

Dim prueba as X
X = new Y()

Esto te permite crear clases de cualquier tipo y trabajarlas como si fuesen iguales puesto que implementan una interfaz común...

Espero que hayas entendido un poco el concepto de la interfaz, en honor a la verdad, a mi me costó bastante comprenderlo, pero una vez que lo entiendes, es una herramienta bastante poderosa

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Punteros a funciones

Publicado por Carlos Escribano Rey (59 intervenciones) el 22/09/2004 17:17:01
Muchas gracias, Edgar. Pues la verdad, en este punto de mi programa ya no se si utilizar interfaces. Lo malo de la programación anárquica cuando tu eres el analista, el programador, no tienes experiencia, y al jefe se le ocurren nuevas ideas constantemente es que al final sale un engendro que funciona en lugar de un programa. Al final me ha servido la utilización de delegados.

Tengo que pensarme seriamente utilizar o no Interfaces, me pica el gusanillo :D

Gracias!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar