?.Invoke() innebärEtt 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
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.
Ett event bygger på en delegate, men med två viktiga skillnader:
+= (prenumerera) och -= (avprenumerera)Actionpublic 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();
}
}
| 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) |
Action, Func, eller EventHandlerSensor med ett event OnTriggeredSensor.Detect() anropas, ska eventet triggasAlarmSystem-klass som prenumererar och skriver ut: "⚠️ Alarm! Något upptäcktes!"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);
}
}
Thermostat som har ett event OnTemperatureChanged(int temp)Display-klass som visar: "Nuvarande temperatur: X°C"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 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