Introducció
En aquest tema, explorarem dos conceptes fonamentals en C#: els delegats i els esdeveniments. Aquests conceptes són essencials per a la programació orientada a esdeveniments i permeten crear aplicacions més flexibles i modulars.
Delegats
Què és un Delegat?
Un delegat és un tipus que representa referències a mètodes amb una signatura específica i un tipus de retorn. Els delegats són similars als punters a funcions en C++, però són més segurs i tipus-segurs.
Definició d'un Delegat
Utilització d'un Delegat
-
Declaració d'un delegat:
public delegate void MyDelegate(string message);
-
Creació d'un mètode que coincideixi amb la signatura del delegat:
public void ShowMessage(string message) { Console.WriteLine(message); }
-
Instanciació del delegat i invocació del mètode:
MyDelegate del = new MyDelegate(ShowMessage); del("Hola, món!");
Exemple Pràctic
using System; public delegate void MyDelegate(string message); public class Program { public static void ShowMessage(string message) { Console.WriteLine(message); } public static void Main() { MyDelegate del = new MyDelegate(ShowMessage); del("Hola, món!"); } }
Explicació del Codi
- Definició del delegat:
public delegate void MyDelegate(string message);
- Creació del mètode:
public static void ShowMessage(string message) { ... }
- Instanciació i invocació:
MyDelegate del = new MyDelegate(ShowMessage); del("Hola, món!");
Esdeveniments
Què és un Esdeveniment?
Un esdeveniment és un mecanisme que permet a una classe o objecte notificar altres classes o objectes quan alguna cosa succeeix. Els esdeveniments es basen en delegats.
Definició d'un Esdeveniment
public class Publisher { // Definició d'un esdeveniment basat en un delegat public event MyDelegate OnMessage; public void SendMessage(string message) { if (OnMessage != null) { OnMessage(message); } } }
Subscripció a un Esdeveniment
public class Subscriber { public void OnMessageReceived(string message) { Console.WriteLine("Missatge rebut: " + message); } }
Exemple Pràctic
using System; public delegate void MyDelegate(string message); public class Publisher { public event MyDelegate OnMessage; public void SendMessage(string message) { if (OnMessage != null) { OnMessage(message); } } } public class Subscriber { public void OnMessageReceived(string message) { Console.WriteLine("Missatge rebut: " + message); } } public class Program { public static void Main() { Publisher publisher = new Publisher(); Subscriber subscriber = new Subscriber(); // Subscripció a l'esdeveniment publisher.OnMessage += subscriber.OnMessageReceived; // Enviament d'un missatge publisher.SendMessage("Hola, món!"); } }
Explicació del Codi
- Definició del delegat:
public delegate void MyDelegate(string message);
- Definició de l'esdeveniment:
public event MyDelegate OnMessage;
- Subscripció a l'esdeveniment:
publisher.OnMessage += subscriber.OnMessageReceived;
- Invocació de l'esdeveniment:
publisher.SendMessage("Hola, món!");
Exercicis Pràctics
Exercici 1: Crear un Delegat i Invocar-lo
- Defineix un delegat que accepti un enter i retorni un enter.
- Crea un mètode que coincideixi amb la signatura del delegat.
- Instancia el delegat i invoca el mètode.
Solució
using System; public delegate int MyDelegate(int number); public class Program { public static int Square(int number) { return number * number; } public static void Main() { MyDelegate del = new MyDelegate(Square); int result = del(5); Console.WriteLine("El quadrat de 5 és: " + result); } }
Exercici 2: Crear un Esdeveniment i Subscripció
- Defineix un esdeveniment basat en un delegat que accepti una cadena.
- Crea una classe que publiqui l'esdeveniment.
- Crea una classe que es subscrigui a l'esdeveniment i imprimeixi el missatge rebut.
Solució
using System; public delegate void MyDelegate(string message); public class Publisher { public event MyDelegate OnMessage; public void SendMessage(string message) { if (OnMessage != null) { OnMessage(message); } } } public class Subscriber { public void OnMessageReceived(string message) { Console.WriteLine("Missatge rebut: " + message); } } public class Program { public static void Main() { Publisher publisher = new Publisher(); Subscriber subscriber = new Subscriber(); publisher.OnMessage += subscriber.OnMessageReceived; publisher.SendMessage("Hola, món!"); } }
Conclusió
En aquest tema, hem après sobre els delegats i els esdeveniments en C#. Els delegats permeten referenciar mètodes amb una signatura específica, mentre que els esdeveniments permeten a les classes notificar altres classes quan alguna cosa succeeix. Aquests conceptes són fonamentals per a la programació orientada a esdeveniments i són àmpliament utilitzats en el desenvolupament de programari modern.
Curs de Programació en C#
Mòdul 1: Introducció al C#
- Introducció al C#
- Configuració de l'Entorn de Desenvolupament
- Programa Hello World
- Sintaxi i Estructura Bàsica
- Variables i Tipus de Dades
Mòdul 2: Estructures de Control
Mòdul 3: Programació Orientada a Objectes
Mòdul 4: Conceptes Avançats de C#
- Interfícies
- Delegats i Esdeveniments
- Genèrics
- Col·leccions
- LINQ (Consulta Integrada al Llenguatge)
- Programació Asíncrona
Mòdul 5: Treballant amb Dades
Mòdul 6: Temes Avançats
- Reflexió
- Atributs
- Programació Dinàmica
- Gestió de Memòria i Recollida d'Escombraries
- Multifil i Programació Paral·lela
Mòdul 7: Construcció d'Aplicacions
Mòdul 8: Millors Pràctiques i Patrons de Disseny
- Estàndards de Codificació i Millors Pràctiques
- Patrons de Disseny
- Proves Unitàries
- Revisió de Codi i Refactorització