C# Academy · Lektion

Delegater och händelser

Lär dig hur delegater och händelser möjliggör kommunikation mellan objekt i C#

Lektion 5 av 610 steg

Delegater och händelser är en gratis lektion i C# Academy på CoddyKit. Detta är lektion 5 av 6. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för C# Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i C# Academy innehåller totalt 6 lektioner.

Delegater och händelser

Välkommen till nästa lektion! I den här lektionen får ni lära er om delegater och händelser i C#, vad de används till och hur de möjliggör händelsestyrd programmering. Nu sätter vi igång!

Delegater och händelser — illustration 1

Vad är en delegat?

En delegat är en typ som representerar en referens till en metod. Den gör det möjligt att skicka metoder som parametrar och anropa dem dynamiskt.

Viktig poäng: Delegater är avgörande för att implementera händelser och callback-funktioner i C#.

Definiera och använda delegater

Använd nyckelordet delegate för att definiera en delegat. Exempel:

using System;

class Program {
    // Define a delegate
    public delegate void MessageDelegate(string message);

    static void DisplayMessage(string message) {
        Console.WriteLine(message);
    }

    static void Main() {
        // Create a delegate instance
        MessageDelegate msg = DisplayMessage;

        // Invoke the delegate
        msg("Hello, Delegates!");
    }
}

Multicast-delegater

En enda delegat kan referera till flera metoder, och alla metoder anropas i tur och ordning. Exempel:

Tips: Använd multicast-delegater i situationer där flera åtgärder behöver utföras.

using System;

class Program {
    public delegate void MessageDelegate(string message);

    static void ShowMessage(string message) {
        Console.WriteLine("Message: " + message);
    }

    static void LogMessage(string message) {
        Console.WriteLine("Log: " + message);
    }

    static void Main() {
        MessageDelegate msg = ShowMessage;
        msg += LogMessage; // Add another method

        msg("Hello, Multicast Delegates!"); // Both methods are invoked
    }
}

Vad är en händelse?

En händelse är en mekanism som gör det möjligt för en klass att meddela andra klasser eller objekt när något av intresse inträffar. Händelser bygger på delegater.

Viktig poäng: Händelser möjliggör lös koppling mellan publicerare och prenumeranter i händelsestyrd programmering.

Definiera och använda händelser

Använd nyckelordet event tillsammans med en delegattyp för att definiera en händelse. Exempel:

Viktig poäng: Händelser gör det möjligt att bygga reaktiva och händelsestyrda system.

using System;

class Publisher {
    public delegate void NotifyDelegate(string message);
    public event NotifyDelegate Notify; // Define an event

    public void RaiseEvent(string message) {
        Notify?.Invoke(message); // Invoke the event
    }
}

class Subscriber {
    public void OnNotify(string message) {
        Console.WriteLine("Subscriber received: " + message);
    }
}

class Program {
    static void Main() {
        Publisher pub = new Publisher();
        Subscriber sub = new Subscriber();

        pub.Notify += sub.OnNotify; // Subscribe to the event
        pub.RaiseEvent("Hello, Events!"); // Raise the event
    }
}

Avregistrera sig från händelser

Prenumeranter kan avregistrera sig från händelser med operatorn -=`` operator. Exempel:

Tips: Avregistrera er alltid från händelser för att undvika minnesläckor.

using System;

class Publisher {
    public delegate void NotifyDelegate(string message);
    public event NotifyDelegate Notify;

    public void RaiseEvent(string message) {
        Notify?.Invoke(message);
    }
}

class Subscriber {
    public void OnNotify(string message) {
        Console.WriteLine("Subscriber received: " + message);
    }
}

class Program {
    static void Main() {
        Publisher pub = new Publisher();
        Subscriber sub = new Subscriber();

        pub.Notify += sub.OnNotify; // Subscribe
        pub.RaiseEvent("First Message");

        pub.Notify -= sub.OnNotify; // Unsubscribe
        pub.RaiseEvent("Second Message"); // No output, as subscriber is removed
    }
}

Övningsuppgift

Skapa en delegat CalculationDelegate för aritmetiska operationer samt en händelse OnCalculate. Skriv ett program som utlöser händelsen och utför beräkningar. Exempel:

using System;

class Calculator {
    public delegate void CalculationDelegate(double result);
    public event CalculationDelegate OnCalculate;

    public void Add(double a, double b) {
        double result = a + b;
        OnCalculate?.Invoke(result);
    }
}

class Program {
    static void Main() {
        Calculator calc = new Calculator();

        // Subscribe to the event
        calc.OnCalculate += result => Console.WriteLine("Result: " + result);

        calc.Add(5, 3); // Outputs: Result: 8
    }
}

Bra jobbat!

Grattis! Ni har lärt er hur delegater och händelser kan användas för att bygga dynamiska och händelsestyrda program. I nästa lektion utforskar vi hur ni arbetar med samlingar som listor, dictionaries och köer. Nu fortsätter vi att koda!

Delegater och händelser — illustration 10
Gratis att börja

Lär dig C# med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
93
Lektioner
346

Vanliga frågor

Är lektionen ”Delegater och händelser” gratis?

Ja – hela texten till ”Delegater och händelser” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i C# Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i C# Academy innehåller totalt 6 lektioner.

Vad lär jag mig i ”Delegater och händelser”?

Lär dig hur delegater och händelser möjliggör kommunikation mellan objekt i C# Ni övar på C# Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig C# Academy?

Du behöver inga förkunskaper. Utbildningen i C# Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 5 av 6.

Hur lång tid tar lektionen ”Delegater och händelser”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här C# Academy-lektionen?

Ja. Varje C# Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Introduktion till gränssnitt
  2. Abstrakta klasser
  3. Statiska medlemmar och metoder
  4. Utforska enum-typer och strukturer
  5. Delegater och händelser
  6. Arbeta med samlingar: listor, lexikon och köer
← Tillbaka till C# Academy