PDF de programación - 08d.- Eventos - Programación Orientada a Objetos en C# .NET

Imágen de pdf 08d.- Eventos - Programación Orientada a Objetos en C# .NET

08d.- Eventos - Programación Orientada a Objetos en C# .NETgráfica de visualizaciones

Publicado el 17 de Febrero del 2019
1.555 visualizaciones desde el 17 de Febrero del 2019
779,2 KB
21 paginas
Creado hace 5a (15/08/2018)
Programación Orientada a Objetos en C# .NET

CAPÍTULO 8
E V E N T O S

2

Ing. Bruno López Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas

1

Programación Orientada a Objetos en C# .NET

Preguntas detonadoras

¿Qué es un evento? ¿Para qué sirve?
¿Qué temas se deben dominar para implementar

aplicaciones con eventos?

¿Qué se requiere para que una clase genere eventos?
¿Qué se requiere para que un objeto reciba

notificaciones de eventos?

Evento

Mecanismo mediante el cual una clase
puede proporcionar notificaciones a sus
clientes cuando ocurre algún suceso
importante con sus objetos.

Es generado por una clase publicadora y
notificado a un conjunto de objetos de
clases clientes o suscriptoras.

3

4

Ing. Bruno López Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas

2

Programación Orientada a Objetos en C# .NET

¿Dónde usar eventos?

La implementación más común de eventos se presenta

en aplicaciones visuales.

Las clases de los controles de la interfaz gráfica
disponen de eventos que se notifican cuando el usuario
realiza alguna actividad con el control (como hacer
click en algún botón de la forma).

Los eventos no son exclusivos para las aplicaciones
visuales, ya que una aplicación de consola puede tener
clases que disponen de eventos, además que el
programador puede diseñar sus propios eventos.

5

6

Uso de eventos

Requisitos:
1. Clase

cuyos

(publicadora).

objetos

generan

el

evento

2. Las clases cuyos objetos

reciben el

evento

(suscriptoras).

Los eventos se declaran a través de delegados
Cuando se produce el evento, entonces se llama a
clases

los delegados que proporcionan las
suscriptoras para dicho evento

Ing. Bruno López Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas

3

Programación Orientada a Objetos en C# .NET

Diseño de eventos

Declaración de un evento

La clase publicadora debe:
1. Definir un delegado para dicho evento.



EventHandler

// Delegado definido por el programador
public delegate void DelegadoEventHandler(string strMensaje);

2. Utiliza el delegado para definir el evento

// Evento
public event DelegadoEventHandler Evento;

7

8

Ing. Bruno López Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas

4

Programación Orientada a Objetos en C# .NET

Generación de un evento
La clase publicadora genera el evento:

// Delegado definido por el programador
public delegate void DelegadoEventHandler(string strMensaje);

// Definición de la clase que genera el evento (clase publicadora)
class ClasePublicadora
{

// Atributos, métodos y propiedades

. . . . .

// Evento
public event DelegadoEventHandler Evento;

// Propiedad que genera el evento
public int Propiedad
{

set
{

}

}

}

// Modifica el valor de su atributo

. . . . .

// Genera el evento y dispara una notificación
this.Evento(“Mensaje generado por el evento”);

9

Suscripción a un evento (opción 1)

La clase suscriptora debe:

1. Utilizar el operador += para recibir notificaciones

2. Proporciona un delegado con el método gestor al

evento

// Suscripción al evento

miObjeto.Evento+= new DelegadoEventHandler(MetodoGestor);

10

Ing. Bruno López Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas

5

Programación Orientada a Objetos en C# .NET

Suscripción a un evento (opción 2)

La clase suscriptora debe:

1. Utilizar el operador += para recibir notificaciones

2. Proporciona el método gestor al evento (sin usar el

delegado).

// Otra forma de suscripción al evento

miObjeto.Evento += MetodoGestor;

11

Suscripción a un evento (opción 3)

La clase suscriptora debe:

1. Utilizar el operador += para recibir notificaciones

2. Proporciona una expresión lambda al evento (sin

usar el delegado ni el método gestor).

// Otra forma de suscripción al evento mediante una expresión lambda

miObjeto.Evento += (Mensaje) => { Console.WriteLine(Mensaje); };

12

Ing. Bruno López Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas

6

Programación Orientada a Objetos en C# .NET

Ejemplo de aplicación de eventos
Un banco desea enviar una notificación a sus clientes

cuando se modifique el saldo de su cuenta.

Datos de la cuenta bancaria

Cuenta (string)
Cliente (string)
Saldo (double)

Métodos

Constructor()
Depositar()
Retirar()

13

Operaciones en la cuenta bancaria

Cuando se realiza una operación (depósito o retiro)

de una cuenta bancaria, esta clase genera un evento.

Para ello, la clase define un delegado y su evento:

CambiarSaldoEventHandler:

Delegado

con

tres

parámetros (cuenta, cliente y saldo).

CambioSaldo: Evento que se genera cuando se modifica el

saldo de la cuenta.

14

Ing. Bruno López Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas

7

Programación Orientada a Objetos en C# .NET

Diseño de la clase

Definiciones del delegado y evento

// Delegado
public delegate void CambiarSaldoEventHandler(string
strCliente, string strCuenta, double dblSaldo);

// Evento
public event CambiarSaldoEventHandler CambioSaldo;

15

16

Ing. Bruno López Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas

8

Programación Orientada a Objetos en C# .NET

Generación del evento al depositar

// Método público para depositar dinero en la cuenta
public void Depositar(double dblCantidad)
{

// Valida la cantidad
if (dblCantidad > 0)
{

// Incrementa el saldo
this.Saldo = this.Saldo + dblCantidad;

// Genera el evento
CambioSaldo(this.Cliente, this.Cuenta, this.Saldo);

}
else

throw new Exception("Cantidad inválida !!!");

}

Generación del evento al retirar

// Método público para retirar dinero de la cuenta
public void Retirar(double dblCantidad)
{

// Valida si hay saldo suficiente ...
if (this.Saldo >= dblCantidad)
{

// Reduce el saldo
Saldo = Saldo - dblCantidad;

// Genera el evento
CambioSaldo(this.Cliente,this.Cuenta,this.Saldo);

}
else

throw new Exception("Saldo insuficiente !!!");

}

17

18

Ing. Bruno López Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas

9

Programación Orientada a Objetos en C# .NET

Implementación del método gestor
y suscripción al evento

// Método gestor ejecutado al modificar el saldo
public void MetodoGestor(string strCliente, string strCuenta,
double dblSaldo)
{

MessageBox.Show("Estimado(a) " + strCliente + ":\nSe le
notifica que el saldo de su cuenta " + strCuenta + " se ha
modificado.\nNuevo saldo: " + dblSaldo.ToString("C"));
}

// Suscripción al evento
miCuentaBancaria.CambioSaldo += MetodoGestor;

Ejemplo de ejecución

19

20

Ing. Bruno López Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas

10

Programación Orientada a Objetos en C# .NET

Cancelar la suscripción a un evento

Se puede impedir que se invoque el manejador de

eventos, cuando se genera una notificación.

Debe cancelar la suscripción antes de eliminar el

objeto suscriptor.

Se utiliza el operador -= para cancelar la suscripción.
Ejemplo:

miObjeto.Evento -= MetodoGestor;

21

La interfase INotifyPropertyChanged

Incluida en el espacio de nombres:

using System.ComponentModel;

Se utiliza para notificar a clases suscriptoras sobre el
cambio de valor de alguna propiedad de la clase
publicadora.

Su uso más común es mediante enlace de clientes

(binding)

22

Ing. Bruno López Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas

11

Programación Orientada a Objetos en C# .NET

Sintaxis de INotifyPropertyChanged

public interface INotifyPropertyChanged

23

Implementación de
INotifyPropertyChanged

La clase publicadora debe:
1. Definir

evento

un

PropertyChanged
PropertyChangedEventHandler de
interfase INotifyPropertyChanged

de
de

nombre
tipo
la

2. Implementar un método que dispare el evento.
3. Invocar el método disparador del evento al

modificar el valor de una propiedad

24

Ing. Bruno López Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas

12

Programación Orientada a Objetos en C# .NET

Ejemplo de INotifyPropertyChanged

Una clase llamada Artículo tiene 4 atributos

con sus respectivas propiedades
Código (string)
Nombre (string)
Precio (double)
Cantidad en existencia (double)

Requiere enviar una notificación a sus suscriptores
cuando se modifique el valor de alguna de sus
propiedades

Diseño de la clase

25

26

Ing. Bruno López Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas

13

Programación Orientada a Objetos en C# .NET

Definición del evento y método
disparador en la clase publicadora

class Articulo : INotifyPropertyChanged
{

// Definiciones de atributos y propiedades
. . .
. . .

// Definición del evento PropertyChanged de INotifyPropertyChanged

public event PropertyChangedEventHandler PropertyChanged;

// Método disparador del evento

private void NotificarCambioPropiedad(string

strNombrePropiedadCambiada)

{

if (PropertyChanged != null)
PropertyChanged(this, new

PropertyChangedEventArgs(strNombrePropiedadCambiada));

}

}

27

¿Cómo disparar el evento en la
clase publicadora?

Cada propiedad de la clase publicadora invoca

el método disparador (enviándole su nombre)

// Propiedad
public string Codigo
{

get { return _strCodigo; }
set
{

if (value == "")

throw new Exception("No deje en blanco el código del artículo");

else
{

_strCodigo = value;
NotificarCambioPropiedad("Codigo");

}

}

}

28

Ing. Bruno López Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas

14

Programación Orientada a Objetos en C# .NET

Método gestor

Se invoca al suscribirse al evento de la clase

publicadora

Se codifica fuera de la clase suscriptora y/o de la

clase publicadora

P. ejem. En la forma

private void MetodoGestor(object sender, PropertyChangedEventArgs e)
{

MessageBox.Show("Se ha cambiado el valor de "+e.PropertyName);

}

29

Suscribirse al evento

Se

suscribe

a
  • Links de descarga
http://lwp-l.com/pdf15274

Comentarios de: 08d.- Eventos - Programación Orientada a Objetos en C# .NET (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad