Deklarera händelser i C#
Händelser i C# är en kraftfull mekanism som gör att objekt kan kommunicera med varandra genom att signalera när något av intresse inträffar. Det här konceptet är avgörande för utvecklare som vill skapa interaktiva och underhållsbara program.
När du fortsätter att utveckla butiksprogrammet fokuserar ditt team nu på att förbättra programmets flexibilitet med hjälp av arvs- och händelsehantering. När en kund till exempel slutför ett köp vill du att både inventeringssystemet och försäljningsrapporteringssystemet ska meddelas automatiskt. Genom att deklarera händelser i en basklass kan härledda klasser generera eller hantera dessa händelser, vilket säkerställer effektiv kommunikation mellan komponenter samtidigt som organiserad och återanvändbar kod upprätthålls.
Deklarera händelser
Händelser gör det möjligt för en klass eller ett objekt att meddela andra klasser eller objekt när något av intresse inträffar. Utgivaren är den klass som definierar och genererar händelsen, medan prenumeranterna är de klasser som kopplar metoder för att hantera händelsen. I C# används händelsenyckelordet för att deklarera en händelse, vilket säkerställer att endast utgivarklassen kan generera den, medan prenumeranter kan bifoga körbar kod för att svara på den.
Exempel: Deklarera och höja en händelse
public class Counter
{
public event EventHandler ThresholdReached;
protected virtual void OnThresholdReached(EventArgs e)
{
ThresholdReached?.Invoke(this, e);
}
public void Increment(int value, int threshold)
{
if (value >= threshold)
{
OnThresholdReached(EventArgs.Empty);
}
}
}
// Subscribing to the event
Counter counter = new Counter();
counter.ThresholdReached += (sender, e) => Console.WriteLine("Threshold reached!");
// Triggering the event
counter.Increment(10, 5); // Output: "Threshold reached!"
Anmärkning
Händelser som inte har några prenumeranter utlöses aldrig.
Använda händelser i arv
I scenarier där du vill dela händelsefunktioner i flera klasser kan du deklarera händelser i en basklass och tillåta härledda klasser att höja eller hantera dem. Den här metoden främjar återanvändning av kod och förenklar underhåll.
Exempel: Deklarera och höja händelser i en basklass
public class BaseCounter
{
public event EventHandler ThresholdReached;
protected virtual void OnThresholdReached(EventArgs e)
{
ThresholdReached?.Invoke(this, e);
}
public void Increment(int value, int threshold)
{
if (value >= threshold)
{
OnThresholdReached(EventArgs.Empty);
}
}
}
public class AdvancedCounter : BaseCounter
{
protected override void OnThresholdReached(EventArgs e)
{
Console.WriteLine("AdvancedCounter: Threshold reached!");
base.OnThresholdReached(e);
}
}
// Usage
AdvancedCounter counter = new AdvancedCounter();
counter.ThresholdReached += (sender, e) => Console.WriteLine("Subscriber: Threshold reached!");
counter.Increment(10, 5);
// Output:
// AdvancedCounter: Threshold reached!
// Subscriber: Threshold reached!
Det här exemplet visar hur en härledd klass kan åsidosätta basklassens utlösande logik för händelser samtidigt som prenumeranter fortfarande meddelas.
Metodtips för att deklarera händelser
-
Inkapsling: Använd
protectedåtkomstmodifieraren för händelsehöjande metoder för att säkerställa att händelser endast genereras inom deklareringsklassen eller dess härledda klasser. -
Virtuella metoder: Använd
protected virtualmetoder för att tillåta härledda klasser att anpassa händelsehöjningslogik. - Namngivning av händelser: Använd meningsfulla namn för händelser för att tydligt ange deras syfte.
Genom att förstå hur du deklarerar och använder händelser i praktiska scenarier kan du skapa flexibla och underhållsbara program som effektivt svarar på användaråtgärder och systemändringar.