Meer informatie over events

Oefening 1

Vul de ontbrekende delen in __________ om delegates correct te implementeren.

Specificaties

  • Vul de ontbrekende onderdelen correct in.
  • Test de code in een C#-omgeving en controleer of de werking correct is.

Verwachte output

Knop is ingedrukt!
De knop is geklikt! Event is geactiveerd.

Nu jij

using System;
 
class Program
{
    // Stap 1: Delegate definiëren
    __________ int RekenDelegate(int a, int b);
 
    static void Main()
    {
        // Stap 2: Delegate toewijzen aan methoden
        __________ optellen = Optellen;
        __________ aftrekken = Aftrekken;
 
        // Stap 3: Delegate aanroepen
        int resultaat1 = optellen(10, 5);
        int resultaat2 = aftrekken(10, 5);
 
        // Stap 4: Output tonen
        Console.WriteLine($"Optellen: 10 + 5 = {resultaat1}");
        Console.WriteLine($"Aftrekken: 10 - 5 = {resultaat2}");
    }
 
    // Methode voor optellen
    static int Optellen(int x, int y)
    {
        return x + y;
    }
 
    // Methode voor aftrekken
    static int Aftrekken(int x, int y)
    {
        return x - y;
    }
}

Opdracht 2

Vul de ontbrekende delen in __________ om delegates correct te implementeren.

Specificaties

  • Vul de ontbrekende onderdelen correct in.
  • Test de code in een C#-omgeving en controleer of de werking correct is.

Verwachte output

Als invoer is 1 dan komt in de console:

Het dier maakt het volgende geluid:
Woef woef!

Als invoer is 3 dan komt in de console:

Het dier maakt het volgende geluid:
Boehhh!

Nu jij

using System;
 
class Program
{
    // Stap 1: Delegate definiëren
    __________ void DierGeluidDelegate();
 
    static void Main()
    {
        // Stap 2: Opties weergeven
        Console.WriteLine("Kies een dier om het geluid te horen:");
        Console.WriteLine("1. Hond");
        Console.WriteLine("2. Kat");
        Console.WriteLine("3. Koe");
        Console.WriteLine("4. Schaap");
 
        Console.Write("Voer een keuze in (1-4): ");
        string keuze = Console.ReadLine();
 
        // Stap 3: Delegate toewijzen op basis van keuze
        __________ geluidMaken = keuze switch
        {
            "1" => Blaffen,
            "2" => Miauwen,
            "3" => BoeRoepen,
            "4" => BlaatRoepen,
            _ => null
        };
 
        if (geluidMaken == null)
        {
            Console.WriteLine("Ongeldige keuze!");
            return;
        }
 
        // Stap 4: Delegate uitvoeren
        Console.WriteLine("\nHet dier maakt het volgende geluid:");
        geluidMaken();
    }
 
    // Diergeluiden
    static __________ Blaffen() => Console.WriteLine("Woef woef!");
    static __________ Miauwen() => Console.WriteLine("Miauw miauw!");
    static __________ BoeRoepen() => Console.WriteLine("Boehhh!");
    static __________ BlaatRoepen() => __________;
}

Opdracht 3

Vul de ontbrekende delen in om events correct te implementeren.

Specificaties

  • Vul de ontbrekende onderdelen correct in.
  • Test de code in een C#-omgeving en controleer of de werking correct is.

Verwachte output

Huidige temperatuur: 25°C
Huidige temperatuur: 35°C
⚠️ Waarschuwing! Hoge temperatuur: 35°C

Nu jij

using System;
 
// Stap 1: Custom EventArgs maken
class TemperatuurEventArgs __________
 
// Stap 2: Klasse met event maken
class TemperatuurSensor
{
    public event EventHandler<TemperatuurEventArgs>? TemperatuurTeHoog;
 
    public void MeetTemperatuur(double temperatuur)
    {
        Console.WriteLine($"Huidige temperatuur: {temperatuur}°C");
 
        if (temperatuur > 30) // Drempelwaarde
        {
            TemperatuurTeHoog?.Invoke(this, new TemperatuurEventArgs(temperatuur));
        }
    }
}
 
// Stap 3: Klasse die luistert naar het event
class Monitoring
{
    public void Waarschuw(object sender, TemperatuurEventArgs e)
    {
        Console.WriteLine($"⚠️ Waarschuwing! Hoge temperatuur: {e.Temperatuur}°C");
    }
}
 
// Stap 4: Testen
class Program
{
    static void Main()
    {
        TemperatuurSensor sensor = new();
        Monitoring monitor = new();
 
        // Abonneren op het event
        sensor.TemperatuurTeHoog += monitor.Waarschuw;
 
        // Testmetingen
        sensor.MeetTemperatuur(25); // Geen waarschuwing
        sensor.MeetTemperatuur(35); // Waarschuwing wordt geactiveerd
    }
}
 

Opdracht 4

Zorg ervoor dat het aanbellen wordt gelogd.

Specificaties:

  • Maak een klasse Logger
  • Geef de klasse een geschikte methode
  • Subscribe the methode bij de deurbel instantie

Verwachte output

E-mail naar: software@deurbel.nl, Bericht: Er is aangebeld!
[LOG] Deurbel event: Ontvanger=software@deurbel.nl, Bericht=Er is aangebeld!

Nu jij

class MessageEventArgs : EventArgs {
   public string Ontvanger { get; set; } 
   public string Tekst { get; set; } 
}
 
public delegate void Observer(object sender, MessageEventArgs message);
 
class Mailer {
   public void SendMail(object sender, MessageEventArgs e) {
       Console.WriteLine($"E-mail naar: {e.Ontvanger}, Bericht: {e.Tekst}");
   }
}
 
class Deurbel {
   public event Observer? observer;
 
   public void BelDrukken() {
       observer?.Invoke(this, new MessageEventArgs { 
           Ontvanger = "software@deurbel.nl", 
           Tekst = "Er is aangebeld!" 
       });
   }
}
 
// Hoofdprogramma om de deurbel, mailer en logger te koppelen.
class Program {
   static void Main() {
       // Instantie van Deurbel maken.
       Deurbel deurbel = new Deurbel();
       // Instantie van Mailer maken.
       Mailer mailer = new Mailer();
       // Mailer abonneren op het event van de deurbel.
       deurbel.observer += mailer.SendMail;
       // Simuleren van een deurbel-activiteit.
       deurbel.BelDrukken();
   }
}
 

Opdracht 5

Vul de ontbrekende delen in om events correct te implementeren.

Specificaties

  • Vul de ontbrekende onderdelen correct in.
  • Test de code in een C#-omgeving en controleer of de werking correct is.

Verwachte output

Knop is ingedrukt!
De knop is geklikt! Event is geactiveerd.

Nu jij

using System;
 
class Knop
{
    // Stap 1: Event definiëren met EventHandler
    public event EventHandler? Klik;
 
    // Stap 2: Methode die het event triggert
    public void DrukOpKnop()
    {
        Console.WriteLine("Knop is ingedrukt!");
        
        // Stap 3: Event activeren (null-check)
        __________ // Gebruik als eventargs EventArgs.empty
    }
}
 
// Hoofdprogramma om het event te testen
class Program
{
    static void Main()
    {
        // Instantie van Knop maken
        Knop knop = new Knop();
 
        // Abonneren op het event met een event-handler
        knop.Klik __________ KnopIngedrukt;
 
        // Simuleren van een knopdruk
        knop.DrukOpKnop();
    }
 
    // Methode die reageert op het Klik-event
    static void KnopIngedrukt(object? sender, EventArgs e)
    {
        Console.WriteLine("De knop is geklikt! Event is geactiveerd.");
    }
}

Opdracht 6

Vul de ontbrekende delen in om events correct te implementeren.

Specificaties

  • Vul de ontbrekende onderdelen correct in.
  • Test de code in een C#-omgeving en controleer of de werking correct is.

Verwachte output

Verkocht: 3x Laptop. Nieuwe voorraad: 7
Verkocht: 3x Laptop. Nieuwe voorraad: 4
⚠️ LET OP: Laag in voorraad! Product: Laptop, Aantal over: 4

Nu jij

using System;
 
// Stap 1: Custom EventArgs maken
class VoorraadEventArgs : ________
{
    public string ProductNaam { get; }
    public int HuidigeVoorraad { get; }
 
    ________  // constructor
}
 
// Stap 2: Klasse met event
class Product
{
    public string Naam { get; }
    private int voorraad;
 
    public event ________ VoorraadLaag;
 
    public Product(string naam, int startVoorraad)
    {
        Naam = naam;
        voorraad = startVoorraad;
    }
 
    public void Verkoop(int aantal)
    {
        voorraad -= aantal;
        Console.WriteLine($"Verkocht: {aantal}x {Naam}. Nieuwe voorraad: {voorraad}");
 
        if (voorraad < 5) // Drempelwaarde
        {
            VoorraadLaag?.Invoke(this, ________);
        }
    }
}
 
// Stap 3: Klasse die luistert naar het event
class Magazijn
{
    public void Waarschuw(object sender, ________)
    {
        Console.WriteLine($"⚠️ LET OP: Laag in voorraad! Product: {e.ProductNaam}, Aantal over: {e.HuidigeVoorraad}");
    }
}
 
// Stap 4: Testen
class Program
{
    static void Main()
    {
        Product product = new("Laptop", 10);
        Magazijn magazijn = new();
 
        // Abonneren op het event
        product.VoorraadLaag ________ magazijn.Waarschuw;
 
        // Simuleren van verkopen
        product.Verkoop(3);  // Geen waarschuwing
        product.Verkoop(3);  // Geen waarschuwing
        product.Verkoop(2);  // Waarschuwing wordt geactiveerd
    }
}