TOPICOS AVANZADOS DE PROGRAMACIÓN ITSL

Unidad

1

Eventos

1.1. Tipos de eventos 1.2. Generación y propagación de eventos 1.3. Métodos de control de eventos 1.4. Creación de eventos.

Ing. María Gpe. Flores Luévanos

Página 1

como pronto veras. es un tipo de dato definido por el usuario. Además. Más aun. ¿Por qué Delegados? En general los delegados son útiles por dos razones principales. los delegados soportan eventos. pero el método que de hecho se invoca se determina en tiempo de ejecución y no en tiempo de compilación. estas creando un objeto que pueda almacenar una referencia a un método. Flores Luévanos Página 2 . el mismo delegado puede utilizarse para invocar diferentes métodos.TOPICOS AVANZADOS DE PROGRAMACIÓN ITSL Introducción En términos sencillos. Los delegados pueden guardar más de un método. cuando creas un delegado. El constructor del delegado espera el nombre del método. María Gpe. simplemente cambiando el método al que hace referencia. un delegado puede invocar el método al cual hace referencia. Ing. Características de los Delegados:      Los delegados tienen visibilidad. Así. los delegados le dan a tu programa un medio para ejecutar métodos en tiempo de ejecución sin necesidad de especificar de qué método se trata en tiempo de compilación. Así. este puede ser invocado a través del delegado. Los delegados se crean con el operador new. La invocación de un delegado provoca la invocación de todos los métodos que almacena. Una vez que un delegado hace referencia a un método. La segunda. Un tipo delegado se declara utilizando la palabra clave delegate. el método puede ser invocado a través de esa referencia. El formato general de una declaración es el siguiente: Delegate tipo_ret nombre(lista de parámetros). Esta capacidad es muy útil cuando quieres crear una estructura que permita conectar componentes. La principal ventaja de un delegado es que te permite especificar la invocación a un método. La primera. un delegado es un objeto que puede hacer referencia a un método.

MD = new MetodoDel(dl. DelegadoTest dl = new DelegadoTest().WriteLine("Leer cadena:"). } } Ing. Console. namespace Delegados2 { class Program { static void Main(string[] args) { // crea delegado delegado MetodoDel MD. MD = new MetodoDel(dl.WriteLine("Cadena resultante invierte cadena: " + MD(str)).ReadLine().ReadKey(). double parametro2) { return parametro1 * parametro2. string str.InvierteCadena). MD = new MetodoDel(dl. str = Console. Console. Console.WriteLine("Cadena resultante elimina espacios: " + MD(str)). María Gpe.WriteLine("Cadena resultante reemplaza espacios: "+MD(str)). //crea un delegado usando un metodo de instancia Console.EliminaEspacios). double parametro2). Console. } public double divide(double parametro1.ReemplazaEspacios).TOPICOS AVANZADOS DE PROGRAMACIÓN ITSL Ejemplo 1: delegate double operacion(double parametro1. } } class Ejemplo { public double multiplica(double parametro1. double parametro2) { return parametro1 /parametro2. Flores Luévanos Página 3 .

Console. namespace Delegados { class Program { static void Main(string[] args) { // crea delegado delegado DelegadoTest dl = new DelegadoTest(). MetodoDel IC = dl. Ing. //creacion del delegado delegate string MetodoDel(string srt).WriteLine("Cadena resultante: "+str).TOPICOS AVANZADOS DE PROGRAMACIÓN ITSL Ejemplo 2: using System.Linq. str = IC(cad).Text. using System. Flores Luévanos Página 4 . MetodoDel EE = dl.Generic. //invoca metodos a traves del delegado Console. using System.WriteLine("Reemplaza espacios con guiones").ReadLine(). //crea un delegado usando un metodo de instancia string str.ReadKey().WriteLine("Cadena resultante: " + str). Console.WriteLine("Cadena resultante: " + str). Console. str = EE(cad).Collections. } } } class DelegadoTest { public string ReemplazaEspacios(string a) { Console. string cad = Console. Console. MetodoDel md =dl. using System.WriteLine("Inserta cadena:"). María Gpe. str = md(cad).EliminaEspacios.ReemplazaEspacios.InvierteCadena.

WriteLine("Elimina Espacios"). } public string InvierteCadena(string a) { string temp = "". i++) { if (a[i] != ' ') { temp += a[i]. i = a. Flores Luévanos Página 5 . } return temp.Replace(' '. } } } Ing. '-').Length .1. Console. int i.j++) { temp += a[i]. } public string EliminaEspacios(string a) { string temp = "". i >= 0.i--.WriteLine("Invierte Cadena").j. } } return temp. Console. int i. for (j = 0. i < a.Length.TOPICOS AVANZADOS DE PROGRAMACIÓN ITSL return a. for (i = 0. María Gpe.

Tipos de eventos. Los eventos son muy utilizados en el código aplicable al mundo real por que se les utiliza para representar cosas como los golpes de tecla. Generación y propagación de eventos También llamado burbujeo de eventos. EventBubbler. entendiendo por evento un mensaje que un objeto envía a algún otro objeto. 1. Por ejemplo.2. Flores Luévanos Página 6 . 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. Los eventos se construyen sobre la base de los delegados. botones y un control de etiqueta. requisiciones para refrescar la pantalla y los datos de entrantes. la notificación automática de que una acción ha ocurrido. Un evento es. Métodos de control de eventos Cuando una acción sobre un componente genera un evento. control personalizado. clics del ratón. un controlador de evento para los golpes de teclas puede responder enviando el carácter asociado con la tecla al monitor. en esencia. El controlador de eventos responde al evento tomando las acciones apropiadas. se espera que suceda algo. Su formato general se muestra a continuación. Un evento funciona así: un objeto que tiene interés en un evento registra un controlador de controladores de eventos están representando por delegados. Los eventos son miembros de una clase y se declaran utilizando la palabra clave event.3. demuestra un simple caso de propagación de eventos. María Gpe. EventBubbler es un control compuesto que contiene cuadros de texto.1. Evento Componente Manejador de eventos Ocurrido Método (Respuesta al evento) Ing. Event delegado-evento nombre-evento.TOPICOS AVANZADOS DE PROGRAMACIÓN ITSL 1. 1.

Este nombre recibe habitualmente el nombre de controlador de eventos. El manejador de eventos. es un objeto de la clase EventHandler del espacio de nombres system que guarda una referencia al método que responderá a ese evento.4.TOPICOS AVANZADOS DE PROGRAMACIÓN ITSL En la figura anterior puede ver que cuando un componente genera un evento. Ing. que recibe también el nombre de delegado. María Gpe. Creación de eventos. un manejador de eventos vinculado con el componente se encarga de analizar que evento ocurrió para responder al mismo ejecutando el método adecuado. La siguiente tabla muestra los eventos más comunes. Flores Luévanos Página 7 . 1.

Flores Luévanos Página 8 .Escribir(). 3. accedemos a la propiedad del objeto y le “adicionamos” el método. Ejemplo 1: class Program { static void Main(string[] args) { Salida s = new Salida("hola mundo"). 4.ok += new EventHandler(Captura). s. Console. Para el mejor entendimiento debemos tener en cuenta que el delegado no es otra cosa que una “clase (tipo de dato) especial”. s. Implementar el método X a suscribir. Este método deberá tener la misma “firma” que el delegado.TOPICOS AVANZADOS DE PROGRAMACIÓN ITSL Siempre que queramos hacer uso de los eventos y delegados en C# deberemos: 1. Declarar el delegado. Teniendo en cuenta que el método X tiene que cumplir con la firma del delegado. pues el evento es algo como una “propiedad especial” del tipo delegado. para asociar o enlazar un método X al evento.ReadKey(). Por último. 2. } Ing. María Gpe. Si tenemos en cuenta que el delegado es una clase. Declarar el evento de tipo del delegado.

} public void Escribir() { Console. Flores Luévanos Página 9 .txt = texto. Console. } } Ing.WriteLine(txt). public Salida(string texto) { this.WriteLine(txt). EventArgs e) { string txt = (string)sender. public event EventHandler ok. ok("Evento capturado". María Gpe. } } class Salida { private string txt.TOPICOS AVANZADOS DE PROGRAMACIÓN ITSL static void Captura(object sender. null).

Sign up to vote on this title
UsefulNot useful