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 = "[email protected]", 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(); }}
Mogelijke uitwerking
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} ); }}// Klasse die een observer implementeert om logs bij te houden.class Logger { // Methode die een logbericht opslaat wanneer het event wordt getriggerd. public void LogEvent(object sender, MessageEventArgs e) { // Simuleert het loggen van een bericht. Console.WriteLine($"[LOG] Deurbel event: Ontvanger={e.Ontvanger}, Bericht={e.Tekst}"); }}class Deurbel { public event Observer? observer; public void BelDrukken() { observer?.Invoke(this, new MessageEventArgs { Ontvanger = "[email protected]", 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(); // Instantie van Logger maken. Logger logger = new Logger(); // Mailer abonneren op het event van de deurbel. deurbel.observer += mailer.SendMail; // Logger abonneren op het event van de deurbel. deurbel.observer += logger.LogEvent; // 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 testenclass 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."); }}
Mogelijke uitwerking
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) Klik?.Invoke(this, EventArgs.Empty); }}// Hoofdprogramma om het event te testenclass 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 makenclass VoorraadEventArgs : ________{ public string ProductNaam { get; } public int HuidigeVoorraad { get; } ________ // constructor}// Stap 2: Klasse met eventclass 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 eventclass Magazijn{ public void Waarschuw(object sender, ________) { Console.WriteLine($"⚠️ LET OP: Laag in voorraad! Product: {e.ProductNaam}, Aantal over: {e.HuidigeVoorraad}"); }}// Stap 4: Testenclass 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 }}
Mogelijke uitwerking
using System;// Stap 1: Custom EventArgs makenclass VoorraadEventArgs : EventArgs{ public string ProductNaam { get; } public int HuidigeVoorraad { get; } public VoorraadEventArgs(string productNaam, int huidigeVoorraad) { ProductNaam = productNaam; HuidigeVoorraad = huidigeVoorraad; }}// Stap 2: Klasse met event makenclass Product{ public string Naam { get; } private int voorraad; public event EventHandler<VoorraadEventArgs>? 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, new VoorraadEventArgs(Naam, voorraad)); } }}// Stap 3: Klasse die luistert naar het eventclass Magazijn{ public void Waarschuw(object sender, VoorraadEventArgs e) { Console.WriteLine($"⚠️ LET OP: Laag in voorraad! Product: {e.ProductNaam}, Aantal over: {e.HuidigeVoorraad}"); }}// Stap 4: Testenclass 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 }}