.NET basado en eventos:cómo funcionan los eventos

 C Programming >> Programación C >  >> Tags >> .NET
.NET basado en eventos:cómo funcionan los eventos

La base misma de la programación dirigida por eventos es el concepto de eventos. Los eventos son una implementación del patrón de observador. Con el patrón de observador tienes una entidad observable y entidades que quieren observar esa entidad.

Los objetos con eventos son observables y otros objetos se suscriben a esos eventos y reciben una notificación cuando suceden.

La mejor manera de entender esto es mirando la interfaz de usuario. En la interfaz de usuario tenemos controles, y cada control tiene eventos asociados con ellos. Podemos reaccionar a estos eventos agregando controladores de eventos que escuchen los eventos.

Aquí tenemos un formulario simple con un botón Enviar. Cuando hago clic en el botón, se actualiza una etiqueta que dice que se envió el mensaje. ¿Cómo sucede esto?

1:el sistema detecta un clic en el botón y ejecuta button.OnClick()

La clase Button implementa un método llamado OnClick(). Cuando el sistema detecta un clic, llama a OnClick().

Los eventos solo pueden ser invocados por la clase que los contiene. Es por eso que el sistema debe llamar a OnClick(). El siguiente paso en realidad invoca el evento.

2 – OnClick() invoca el evento Click

La clase Button hereda la clase Control, que tiene un evento Click.

public event EventHandler Click
Code language: C# (cs)

OnClick() invoca el evento Click:

if(Click != null)
{
   Click(this, e);
}
Code language: C# (cs)

Nota:lo he simplificado un poco, pero puedes ver el código fuente real de .NET aquí.

3 – Se llama al controlador btnSubmit_Click

En el formulario me suscribí al evento Click:

this.btnSubmit.Click += new System.EventHandler(this.btnSubmit_Click);
Code language: C# (cs)

Cuando se invoca el evento Click, llama a todos los métodos que se han suscrito a él. Debido a que btnSubmit_Click está suscrito, recibe una llamada.

private void btnSubmit_Click(object sender, EventArgs e)
{
	lblStatus.Text = $"Message sent at {DateTime.Now}";
}
Code language: C# (cs)

Al final, esto hace que el texto de la etiqueta se actualice: