martes, 31 de enero de 2012

Eventos - Tutorial 4

Hola mis amigos, como para no perder ritmo voy cumplir a medias, lo de RoutedEvent lo estoy armando pero voy lento para que sea fácil ya que son muchos conceptos y antes me interesaría explicar otras cositas como por ejemplo, estos dos delegados que seguro les van a llamar mucho la atención:

•    Action(Of T)
•    Func(Of TResult)

Estos 2 tipos de delegados tiene muchas variantes yo voy a explicar solamente estos, pero creo que va a ser suficiente como para que los otros los entiendan sin ninguna dificultad, la dirección de la ayuda de los amigos de Microsoft es: http://msdn.microsoft.com/es-es/library/018hxwa8.aspx


Ahí vamos, Action(Of T) es un delegado al que le podemos pasar un parámetro, esto nos da la posibilidad de evitar tener que hacer esto public delegate void Mesajoto(string message); entonces yo con Action(Of T) puedo tener infinitas posibilidades, que les quiero decir?? que si quiero pasar un strin, int o una clase lo hago directamente con Action( mi tipo de datos) y me evito tener que declarar un delegado especifico, pero también esta como antes habíamos dicho la posibilidad de hacer un public delegate void DelegadoGenerico(object obj); pero lo que nos da Action y les voy a poner un ejemplo extremo que es Action(Of T1, T2, T3, T4, T5, T6, T7, T8, T9) donde el delegado en este caso no devuelve ningún valor y acepta 9 parámetros del tipo que más les guste.


Es una alternativa interesante pero el detalle a tener en cuenta es que este tipo de delegado nunca devuelve ningún valor, para esto tenemos a Func(Of TResult), es muy similar al anterior con la diferencia de que en este caso, el método que encapsula no tiene parámetros y devuelve un valor, un ejemplo seria public delegate bool EsVerdadero(); acá se ve el caso de un delegado que devuelve un valor booleano true/false. También tiene muchas variantes pero eso se los voy a dejar a ustedes, se que si entendieron esto no les va a costar nada ver los otros ejemplos.

Espero haya quedado claro vuelvo a retomar ya que arranque saliéndome de la pista con los 2 conceptos esos pero sé que les va a servir, es mejor que sobre y no que falte, dejando de lado los refranes vamos a seguir por el camino y vamos a conocer bien a EventHandler, vamos a pensar en como si fuera una minita que se parte de buena, así nos interesamos muchísimo en ella jajaja.


Bueno EventHandler es un delegado, que representa un método que controlará un evento que no tienen datos de evento.

Mas fácil hagan de cuenta que EventHandler es igual  a escribir

public delegate void EventHandler(Object sender, EventArgs e);


Si miran bien y se acuerdan del tutorial numero 3 corresponde a como estandarizábamos el diseño de los eventos, 2 parámetros,  si no se acurdan revisen el tutorial anterior.

Con esto lo que les quiero decir es que si necesitamos un evento donde no tengamos que pasar información declaramos un evento como el siguiente:

 public event EventHandler SimpleEventHandler;

La clase EventArgs que no contiene datos de evento, pero si necesitamos parar datos relacionados al evento, tenemos la posibilidad de usar EventHandler(Of TEventArgs), podríamos tener el siguiente ejemplo:

public event EventHandler<PersonaEventArgs> ListaPersonas;

public class PersonaEventArgs: EventArgs
    {
        //Código que en el próximo tutorial voy a poner.
    }

 

Lo que quiero mostrar es que si pasamos como parámetro una clase la misma tiene que heredar de EventArgs, porque es la clase base para las clases que contienen datos de eventos.

Bueno gente me despido, espero les sirva de algo ya que es una distracción y un gusto como digo siempre compartir lo poco que se con ustedes, yo aprendo día a día muchísimo en los blogs y en los foros, y quiero hacer mi pequeño aporte con estos tutos, ahora si hasta la próxima un saludo, y en el siguiente tutorial voy a subir un ejemplo.

No hay comentarios:

Publicar un comentario

Access