CSharp

L3 Delegater och Event

🎓 Lektion 3: Events – Händelsestyrd programmering i C


🔍 Vad du kommer att lära dig:

  • Vad ett event är i C#
  • Hur events bygger på delegates
  • Hur man deklarerar, anropar och prenumererar på events
  • Vad ?.Invoke() innebär

🧠 Vad är ett event?

Ett event är ett sätt för en klass att signalera att något har hänt – utan att själv veta vem som lyssnar.

Event = signal
Lyssnare = någon som reagerar på signalen

🔁 Liknelse:

Ett brandlarm ringer (eventet triggas), men det vet inte vem som kommer att höra det. Det kan vara brandkåren, en väktare, eller någon som ringer 112.


🧱 Events bygger på delegates

Ett event bygger på en delegate, men med två viktiga skillnader:

  • Endast den klass som definierar eventet får anropa det
  • Andra klasser kan bara använda += (prenumerera) och -= (avprenumerera)

🧪 Exempel – Enkelt event med Action

public class Button
{
    public event Action OnClick;

    public void Click()
    {
        Console.WriteLine("Knappen klickades!");
        OnClick?.Invoke(); // 🔔 Trigga eventet om någon lyssnar
    }
}
public class Program
{
    static void Main()
    {
        Button b = new Button();
        b.OnClick += () => Console.WriteLine("Reagerar på klicket!");
        b.Click();
    }
}

🔍 Förklaring:

Del Förklaring
event Action OnClick Ett event som kan ha flera lyssnare
+= Lägger till en metod att köra när eventet triggas
?.Invoke() Kör eventet om det finns några lyssnare (null-säkerhet)

💡 Viktigt om events

  • Du kan ha flera prenumeranter (precis som en multicast delegate)
  • Den klass som deklarerar eventet är den enda som får anropa det
  • Du kan använda egna delegates eller t.ex. Action, Func, eller EventHandler

🛠️ Övning 1 – Simulera ett enkelt system

  1. Skapa en klass Sensor med ett event OnTriggered
  2. När Sensor.Detect() anropas, ska eventet triggas
  3. Skapa en AlarmSystem-klass som prenumererar och skriver ut: "⚠️ Alarm! Något upptäcktes!"

🧪 Exempel med egen delegate

Vill du skicka med mer data i eventet? Då gör vi en egen delegate:

public delegate void TemperatureChanged(int newTemp);

public class Thermostat
{
    public event TemperatureChanged OnTemperatureChanged;

    public void SetTemperature(int temp)
    {
        Console.WriteLine("Temperatur satt till: " + temp);
        OnTemperatureChanged?.Invoke(temp);
    }
}

🛠️ Övning 2 – Event med data

  1. Skapa en klass Thermostat som har ett event OnTemperatureChanged(int temp)
  2. Skapa en Display-klass som visar: "Nuvarande temperatur: X°C"
  3. Koppla ihop dem så att när temperaturen ändras, uppdateras displayen

🔄 Nästa steg (i Lektion 4):

Vi kommer gå igenom EventHandler och EventArgs, som är det formella mönstret i .NET – lite mer "på riktigt", med stöd för objekt och mer strukturerad data.


✅ Vad du har lärt dig

✔ Vad ett event är och hur det används
✔ Hur events bygger på delegates
✔ Hur man deklarerar, triggar och prenumererar på events
✔ Skillnaden mellan delegate och event
✔ Hur man skickar med data via events