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

// Definició d'un delegat
public delegate void MyDelegate(string message);

Utilització d'un Delegat

  1. Declaració d'un delegat:

    public delegate void MyDelegate(string message);
    
  2. Creació d'un mètode que coincideixi amb la signatura del delegat:

    public void ShowMessage(string message)
    {
        Console.WriteLine(message);
    }
    
  3. 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

  1. Defineix un delegat que accepti un enter i retorni un enter.
  2. Crea un mètode que coincideixi amb la signatura del delegat.
  3. 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ó

  1. Defineix un esdeveniment basat en un delegat que accepti una cadena.
  2. Crea una classe que publiqui l'esdeveniment.
  3. 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.

© Copyright 2024. Tots els drets reservats