Delegados

16/02/2004 - 14:35 por Jonathan | Informe spam
Alguien me podria explicar con palabras siemples para que
sirven?
Gracias :)

Preguntas similare

Leer las respuestas

#6 Tristan
16/02/2004 - 20:43 | Informe spam
Pues tiene su razón el hecho de que se hable de que es una forma elegante de
lo que eran los punteros a funciones.

Los punteros a función de C no son tipados; se puede pasar cualquier número
de parámetros y de cualquier tipo como argumento de un puntero a función.
Esto lógicamente es una causa de errores frecuente en C y en muchos casos
difíciles de detectar. Los delegados por el contrario son fuertemente
tipados. Tan solo se podrá llamar al método delegado pasando los argumentos
necesarios, y el error se detectará en tiempo de compilación.

Juan Carlos Badiola
MVP - C#
Respuesta Responder a este mensaje
#7 Pedro Luna Montalvo
16/02/2004 - 21:00 | Informe spam
Pues estamos de acuerdo en esto.

La declaracion de un delegado no solo declara la intencion de utilizar un
puntero a una funcion, sino que describe tambien la "firma" de dicha
funcion: el valor de retorno, el numero y tipo de parametros que de tener, y
lo mejor de todo, el framework asegura que los metodos tendran exactamente
la firma que se indica en la declaracion del delegado.

Esto le da mayor robustez al entorno, pues como bien dice Tristan, en C el
paso de punteros a funciones era un "declara y ponte a rezar", pues el
entorno no le exigia que se cumpla esto.

Al igual que el manejo de las propiedades, los ExtenderProviders, el modelo
desconectado de ADO.NET, y muchas otras caracteristicas, nos demuestran la
forma simple, moderna y elegante de resolver problemas.

Saludos y mis mejores deseos de codigo excelente (sin excepciones ;) )
Pedro


"Tristan" escribió en el mensaje
news:
Pues tiene su razón el hecho de que se hable de que es una forma elegante


de
lo que eran los punteros a funciones.

Los punteros a función de C no son tipados; se puede pasar cualquier


número
de parámetros y de cualquier tipo como argumento de un puntero a función.
Esto lógicamente es una causa de errores frecuente en C y en muchos casos
difíciles de detectar. Los delegados por el contrario son fuertemente
tipados. Tan solo se podrá llamar al método delegado pasando los


argumentos
necesarios, y el error se detectará en tiempo de compilación.

Juan Carlos Badiola
MVP - C#




Respuesta Responder a este mensaje
#8 Tristan
16/02/2004 - 21:06 | Informe spam
El ejemplo más simple y aplicable, me parece que son los propios eventos de
los formularios windows:

Cuando haces (o lo hace el diseñador por tí en el InitializeComponent):

button1.Click += new EventHandler(button1_Click);

Estás diciendo al evento Click del objeto botón, que añada un delegado para
procesar el evento. Es decir, si te fijas, los delegados son la forma de
conseguir que el tratamiento de un determinado suceso sea variable, elegido
por el usuario de la clase y no prefijado por el que diseñó la clase, en
este caso MS.

Otra aplicación que podría ser intuitiva es en un Sort. Imagina que tienes
una función que quieres que sirva para ordenar cualquier clase de objeto, no
solo números. Tendrás que indicar a la función cual va a ser el criterio de
ordenación. Puedes utilizar un delegado, con el que pasarás como parámetro
del Sort, la función que sirva para comparar, es decir:

delegate bool CriteroComparacion(object valor1, object valor2);

void Sort(object[] array, CriteroComparacion critero)
{
...
if (criterio(array[i - 1], array[i]))
intercambiar o hacer lo que sea
...
}

Ahora ya, para ordenar enteros:

Sort(arrayInt, new CriteroComparacion(ComparaInt));

bool ComparaInt(object int1, object int2)
{
return (int) int1 > (int) int2;
}



Juan Carlos Badiola
MVP - C#
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida