P. 1
Unidad1-2012

Unidad1-2012

|Views: 2.297|Likes:

More info:

Published by: Ing Juan Florees De Garciia on Feb 11, 2012
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

08/15/2013

pdf

text

original

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

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

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

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

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

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

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

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

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

You're Reading a Free Preview

Descarga
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->