EventHandler och EventHandler<T> ärEventArgs är och varför det användsEventHandler?Hittills har vi skrivit våra egna delegates för event, t.ex.:
public delegate void TemperatureChanged(int newTemp);
Men i .NET finns en standarddelegate för events som heter EventHandler.
Den har följande signatur:
void EventHandler(object sender, EventArgs e)
Eller generisk variant:
void EventHandler<TEventArgs>(object sender, TEventArgs e)
EventArgs?EventArgs är en tom basklass som används som "container" för information. Du kan skapa din egen klass som ärver från EventArgs om du vill skicka med mer data.
public class TemperatureEventArgs : EventArgs
{
public int Temperature { get; }
public TemperatureEventArgs(int temperature)
{
Temperature = temperature;
}
}
public class Thermostat
{
public event EventHandler<TemperatureEventArgs> TemperatureChanged;
public void SetTemperature(int newTemp)
{
Console.WriteLine("Temperatur satt till: " + newTemp);
TemperatureChanged?.Invoke(this, new TemperatureEventArgs(newTemp));
}
}
public class Program
{
static void Main()
{
Thermostat t = new Thermostat();
t.TemperatureChanged += OnTempChanged;
t.SetTemperature(22);
t.SetTemperature(30);
}
static void OnTempChanged(object sender, TemperatureEventArgs e)
{
Console.WriteLine($"[Sensor] Nuvarande temperatur är {e.Temperature}°C");
}
}
EventHandler<T>:sender (vem som triggat eventet)TemperatureEventArgs)BankAccountpublic event EventHandler<OverdraftEventArgs> Overdrafted;OverdraftEventArgs som innehåller belopp och saldo"⚠️ Övertrassering! Försökte ta ut 500kr. Saldo: -100kr"SomethingHappened, TemperatureChangedthis som senderEventArgs.Empty om du inte behöver skicka med data✔ Vad EventHandler och EventHandler<T> är
✔ Hur du skickar med data i ett event via EventArgs
✔ Hur man skriver events på det "officiella" .NET-sättet
✔ Varför detta är bättre än egna delegates i större system