Sie sind auf Seite 1von 9

TOPICOS AVANZADOS DE PROGRAMACIN ITSL

Unidad

Eventos

1.1. Tipos de eventos 1.2. Generacin y propagacin de eventos 1.3. Mtodos de control de eventos 1.4. Creacin de eventos.

Ing. Mara Gpe. Flores Luvanos

Pgina 1

TOPICOS AVANZADOS DE PROGRAMACIN ITSL


Introduccin
En trminos sencillos, un delegado es un objeto que puede hacer referencia a un mtodo, es un tipo de dato definido por el usuario. As, cuando creas un delegado, estas creando un objeto que pueda almacenar una referencia a un mtodo. Ms aun, el mtodo puede ser invocado a travs de esa referencia. As, un delegado puede invocar el mtodo al cual hace referencia. Una vez que un delegado hace referencia a un mtodo, este puede ser invocado a travs del delegado. Adems, el mismo delegado puede utilizarse para invocar diferentes mtodos, simplemente cambiando el mtodo al que hace referencia. La principal ventaja de un delegado es que te permite especificar la invocacin a un mtodo, pero el mtodo que de hecho se invoca se determina en tiempo de ejecucin y no en tiempo de compilacin. Un tipo delegado se declara utilizando la palabra clave delegate. El formato general de una declaracin es el siguiente: Delegate tipo_ret nombre(lista de parmetros); Por qu Delegados? En general los delegados son tiles por dos razones principales. La primera, como pronto veras, los delegados soportan eventos. La segunda, los delegados le dan a tu programa un medio para ejecutar mtodos en tiempo de ejecucin sin necesidad de especificar de qu mtodo se trata en tiempo de compilacin. Esta capacidad es muy til cuando quieres crear una estructura que permita conectar componentes. Caractersticas de los Delegados: Los delegados tienen visibilidad. Los delegados se crean con el operador new. El constructor del delegado espera el nombre del mtodo. Los delegados pueden guardar ms de un mtodo. La invocacin de un delegado provoca la invocacin de todos los mtodos que almacena.

Ing. Mara Gpe. Flores Luvanos

Pgina 2

TOPICOS AVANZADOS DE PROGRAMACIN ITSL


Ejemplo 1: delegate double operacion(double parametro1, double parametro2); namespace Delegados2 { class Program { static void Main(string[] args) {
// crea delegado delegado MetodoDel MD; string str; DelegadoTest dl = new DelegadoTest(); //crea un delegado usando un metodo de instancia Console.WriteLine("Leer cadena:"); str = Console.ReadLine(); MD = new MetodoDel(dl.ReemplazaEspacios); Console.WriteLine("Cadena resultante reemplaza espacios: "+MD(str)); MD = new MetodoDel(dl.EliminaEspacios); Console.WriteLine("Cadena resultante elimina espacios: " + MD(str)); MD = new MetodoDel(dl.InvierteCadena); Console.WriteLine("Cadena resultante invierte cadena: " + MD(str)); Console.ReadKey();

} }
class Ejemplo { public double multiplica(double parametro1, double parametro2) { return parametro1 * parametro2; } public double divide(double parametro1, double parametro2) { return parametro1 /parametro2; }

Ing. Mara Gpe. Flores Luvanos

Pgina 3

TOPICOS AVANZADOS DE PROGRAMACIN ITSL


Ejemplo 2:
using System; using System.Collections.Generic; using System.Linq; using System.Text; //creacion del delegado delegate string MetodoDel(string srt); namespace Delegados { class Program { static void Main(string[] args) { // crea delegado delegado DelegadoTest dl = new DelegadoTest(); MetodoDel md =dl.ReemplazaEspacios; //crea un delegado usando un metodo de instancia string str; //invoca metodos a traves del delegado Console.WriteLine("Inserta cadena:"); string cad = Console.ReadLine(); str = md(cad); Console.WriteLine("Cadena resultante: "+str); MetodoDel EE = dl.EliminaEspacios; str = EE(cad); Console.WriteLine("Cadena resultante: " + str); MetodoDel IC = dl.InvierteCadena; str = IC(cad); Console.WriteLine("Cadena resultante: " + str);

Console.ReadKey(); } } } class DelegadoTest { public string ReemplazaEspacios(string a) { Console.WriteLine("Reemplaza espacios con guiones"); Ing. Mara Gpe. Flores Luvanos Pgina 4

TOPICOS AVANZADOS DE PROGRAMACIN ITSL


return a.Replace(' ', '-'); } public string EliminaEspacios(string a) { string temp = ""; int i; Console.WriteLine("Elimina Espacios"); for (i = 0; i < a.Length; i++) { if (a[i] != ' ') { temp += a[i]; } } return temp; } public string InvierteCadena(string a) { string temp = ""; int i,j; Console.WriteLine("Invierte Cadena"); for (j = 0, i = a.Length - 1; i >= 0;i--,j++) { temp += a[i]; } return temp; } } }

Ing. Mara Gpe. Flores Luvanos

Pgina 5

TOPICOS AVANZADOS DE PROGRAMACIN ITSL


1.1. Tipos de eventos.

Un evento es, en esencia, la notificacin automtica de que una accin ha ocurrido. Los eventos son muy utilizados en el cdigo aplicable al mundo real por que se les utiliza para representar cosas como los golpes de tecla, clics del ratn, requisiciones para refrescar la pantalla y los datos de entrantes. Los eventos se construyen sobre la base de los delegados. Un evento funciona as: un objeto que tiene inters en un evento registra un controlador de controladores de eventos estn representando por delegados. El controlador de eventos responde al evento tomando las acciones apropiadas. Por ejemplo, un controlador de evento para los golpes de teclas puede responder enviando el carcter asociado con la tecla al monitor. Los eventos son miembros de una clase y se declaran utilizando la palabra clave event. Su formato general se muestra a continuacin. Event delegado-evento nombre-evento;

1.2.

Generacin y propagacin de eventos

Tambin llamado burbujeo de eventos, control personalizado, EventBubbler, demuestra un simple caso de propagacin de eventos. EventBubbler es un control compuesto que contiene cuadros de texto, botones y un control de etiqueta. EventBubbler burbujas de los eventos de comandos de los botones para el control de contenedor principal (s mismo) y expone como eventos de alto nivel.

1.3.

Mtodos de control de eventos

Cuando una accin sobre un componente genera un evento, se espera que suceda algo, entendiendo por evento un mensaje que un objeto enva a algn otro objeto.
Evento
Componente

Manejador de eventos

Ocurrido

Mtodo (Respuesta al evento)

Ing. Mara Gpe. Flores Luvanos

Pgina 6

TOPICOS AVANZADOS DE PROGRAMACIN ITSL


En la figura anterior puede ver que cuando un componente genera un evento, un manejador de eventos vinculado con el componente se encarga de analizar que evento ocurri para responder al mismo ejecutando el mtodo adecuado. El manejador de eventos, que recibe tambin el nombre de delegado, es un objeto de la clase EventHandler del espacio de nombres system que guarda una referencia al mtodo que responder a ese evento. Este nombre recibe habitualmente el nombre de controlador de eventos.

1.4. Creacin de eventos.


La siguiente tabla muestra los eventos ms comunes.

Ing. Mara Gpe. Flores Luvanos

Pgina 7

TOPICOS AVANZADOS DE PROGRAMACIN ITSL

Siempre que queramos hacer uso de los eventos y delegados en C# deberemos: 1. Declarar el delegado. Para el mejor entendimiento debemos tener en cuenta que el delegado no es otra cosa que una clase (tipo de dato) especial. 2. Declarar el evento de tipo del delegado. Si tenemos en cuenta que el delegado es una clase, pues el evento es algo como una propiedad especial del tipo delegado. 3. Implementar el mtodo X a suscribir. Este mtodo deber tener la misma firma que el delegado.
4. Por ltimo, para asociar o enlazar un mtodo X al evento, accedemos a la

propiedad del objeto y le adicionamos el mtodo. Teniendo en cuenta que el mtodo X tiene que cumplir con la firma del delegado. Ejemplo 1: class Program { static void Main(string[] args) { Salida s = new Salida("hola mundo"); s.ok += new EventHandler(Captura); s.Escribir(); Console.ReadKey(); }
Ing. Mara Gpe. Flores Luvanos Pgina 8

TOPICOS AVANZADOS DE PROGRAMACIN ITSL


static void Captura(object sender, EventArgs e) { string txt = (string)sender; Console.WriteLine(txt); } } class Salida { private string txt; public event EventHandler ok; public Salida(string texto) { this.txt = texto; } public void Escribir() { Console.WriteLine(txt); ok("Evento capturado", null); }

Ing. Mara Gpe. Flores Luvanos

Pgina 9

Das könnte Ihnen auch gefallen