La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Eventos y Delegados. Delegados: Definición y Características Utilizar Delegados Devolución de llamadas Multidifusion Métodos Anónimos Ejemplos Eventos:

Presentaciones similares


Presentación del tema: "Eventos y Delegados. Delegados: Definición y Características Utilizar Delegados Devolución de llamadas Multidifusion Métodos Anónimos Ejemplos Eventos:"— Transcripción de la presentación:

1 Eventos y Delegados

2 Delegados: Definición y Características Utilizar Delegados Devolución de llamadas Multidifusion Métodos Anónimos Ejemplos Eventos: Definición y Características Suscribir y cancelar la suscripción a eventos Ejemplos

3 Principales características: Son similares a los punteros a función de C++, pero poseen seguridad de tipos. Permiten pasar los métodos como parámetros. Pueden utilizarse para definir métodos de devolución de llamada. Pueden encadenarse Ej: llamar a varios métodos en un solo evento. Métodos Anónimos en C# 2.0 Permiten pasar bloques de código como parámetros en lugar de utilizar métodos definidos independientemente.

4 public delegate int PerformCalculation(int x, int y); Un delegado es un tipo que hace referencia a un método.delegado Cuando se asigna un método a un delegado, éste se comporta exactamente como el método. Definición:

5 1.Crear delegado public delegate int PerformCalculation(int x, int y); 2.Crear método para el delegado public static int Product(int x, int y){ return x * y; } 3.Definir referencia a delegado y asignar método PerformCalculation pc = Product; 4.Llamar al delegado pc(3,2);

6 Los tipos de delegados se derivan de la clase Delegate en.NET Framework.Delegate Los tipos de delegados son sealed.sealed Puesto que el delegado con instancias es un objeto, puede pasarse como parámetro o asignarse a una propiedad. Devolución de llamada: un método recibe un delegado como parámetro y llama al delegado posteriormente.

7 El método siguiente utiliza el tipo PerformCalculation como parámetro: public void MethodWithCallback(int param1, int param2, PerformCalculation callback) { callback( param1, param2); } A continuación, se puede pasar el delegado creado anteriormente a ese método: MethodWithCallback(3, 2, pc); y retornaría el resultado siguiente : 6

8 Multidifusión: Un delegado puede llamar a más de un método cuando se invoca. Para agregar un método adicional a la lista de métodos del delegado (lista de invocación), simplemente es necesario agregar dos delegados mediante los operadores de suma o de asignación de suma ('+' o '+=').

9 Junto con el método estático Product, ahora tenemos tres métodos que la instancia de PerformCalculation puede contener. public class MethodClass { public int Sum(int x, int y) { } public int Duplicate(int x, int y) { } } MethodClass obj = new MethodClass(); PerformCalculation d1 = obj.Sum; PerformCalculation d2 = obj.Duplicate; PerformCalculation d3 = Product; //Both types of assignment are valid. PerformCalculation allMethodsDelegate = d1 + d2; allMethodsDelegate += d3;

10 En versiones de C# anteriores a la versión 2.0, la única manera de declarar un delegado era utilizar métodos con nombre. C# 2.0 presenta los métodos anónimos. Es una forma de pasar un bloque de código como parámetro de delegado. Por ejemplo: // Create a handler for a click event button1.Click += delegate(System.Object o, System.EventArgs e) { System.Windows.Forms.MessageBox.Show("Click!"); }; O bien, // Create a delegate instance delegate void Del(int x); // Instantiate the delegate using an anonymous method Del d = delegate(int k) { /*... */ };

11 // Declare a delegate delegate void Del(int i, double j); class MathClass { static void Main() { MathClass m = new MathClass(); // Delegate instantiation using "MultiplyNumbers" Del d = m.MultiplyNumbers; // Invoke the delegate object. System.Console.WriteLine("Invoking the delegate using 'MultiplyNumbers':"); for (int i = 1; i <= 5; i++) { d(i, 2); } // Declare the associated method. void MultiplyNumbers(int m, double n) { System.Console.Write(m * n + " "); }

12 Invocando el Delegate usando 'MultiplyNumbers': 2 4 6 8 10

13 Los eventos proporcionan un medio de que una clase u objeto informe a otras clases u objetos cuando sucede algo relevante. La clase que envía (o produce) el evento recibe el nombre de editor o publicador y las clases que reciben (o controlan) el evento se denominan suscriptores.

14 Principales propiedades: El editor determina cuándo se produce un evento. Los suscriptores determinan qué operación se realiza en respuesta al evento. Un evento puede tener varios suscriptores. Un suscriptor puede controlar varios eventos de varios editores. No se llama nunca a los eventos que no tienen suscriptores. En la biblioteca de clases.NET Framework, los eventos se basan en el delegado EventHandler y en la clase base EventArgs.EventHandler EventArgs public delegate void EventHandler(object sender, EventArgs e); public event ChangedEventHandler Changed; if (Changed != null) Changed(this, e); También podemos crear eventos con nuestros propios delegados

15 ¿Cuando nos suscribimos a un evento? Cuando se desea escribir código personalizado al que se llama cuando se produce ese evento. Ej: puede suscribirse al evento "click" de un botón para que la aplicación realice alguna operación cuando el usuario haga clic en el botón.

16 Si la ventana Propiedades no está visible, en la vista Diseño, haga clic con el botón secundario del mouse en el formulario o control para el cual desea crear un controlador de eventos y seleccione Propiedades. En la parte superior de la ventana Propiedades, haga clic en el icono Eventos. Haga doble clic en el evento que desea crear (por ejemplo, el evento Load). Visual C# crea un método controlador de eventos vacío y lo agrega al código. También puede agregar manualmente el código en la vista Código. Por ejemplo, las líneas siguientes de código declaran un método controlador de eventos al que se llamará cuando la clase Form genere el evento Load. private void Form1_Load(object sender, System.EventArgs e) { // Add your form load event handling code here. } La línea de código necesaria para suscribirse al evento también se genera automáticamente en el método InitializeComponent en el archivo Form1.Designer.cs del proyecto. this.Load += new System.EventHandler(this.Form1_Load);

17 1.Defina un método controlador de eventos cuya firma coincida con la firma de delegado del evento. Ej: void HandleCustomEvent(object sender, CustomEventArgs a) { // Do something useful here. } 2.Utilice el operador de suma y asignación (+ =) para asociar el controlador de eventos al evento. El objeto publisher tiene un evento RaiseCustomEvent. Observe que la clase de suscriptor necesita una referencia a la clase de editor para suscribirse a sus eventos. publisher.RaiseCustomEvent += this.HandleCustomEvent; La sintaxis anterior es nueva en C# 2.0. En la sintaxis de C# 1.0: publisher.RaiseCustomEvent += new CustomEventHandler(HandleCustomEvent);

18 1er. Ejemplo: El tipo Event será una clase derivada de EventArgs 2do. Ejemplo: El tipo Event será el delegado EventHandler.

19 Clase derivada de EventArgs. Enviamos datos personalizados con el evento Capturan el evento y ejecutan alguna acción Genera el evento


Descargar ppt "Eventos y Delegados. Delegados: Definición y Características Utilizar Delegados Devolución de llamadas Multidifusion Métodos Anónimos Ejemplos Eventos:"

Presentaciones similares


Anuncios Google