CSharp

L6 Övningar

🟢 Grundläggande övningar (delegates och multicast)

🧪 Övning 1 – Enkel delegate med Func

Skapa en Func<int, int, int> som först pekar på en Add-metod och sedan på en Multiply-metod. Anropa båda och skriv ut resultatet.

🧪 Övning 2 – Multicast delegate

Skapa en delegate NotificationHandler och två metoder:

  • NotifyEmail() som skriver "📧 E-post skickad!"
  • NotifySMS() som skriver "📱 SMS skickat!"

Lägg till båda metoderna i en multicast delegate och anropa den.


🟡 Mellannivå – delegates som parametrar och lambdas

🧪 Övning 3 – Filtrera lista med delegate

Skapa en lista av heltal. Skapa en delegate Filter(int n): bool och en metod List<int> FilterList(List<int> list, Filter f).
Använd en lambda för att hämta ut:

  • Alla jämna tal
  • Alla tal > 10

🧪 Övning 4 – Texttransform med delegate

Skriv en metod TransformText(string input, Func<string, string> transformer)
Anropa den med:

  • En metod som returnerar strängen i versaler
  • En lambda som reverserar texten

🔴 Avancerade övningar – EventHandler, EventArgs och events

🧪 Övning 5 – Bokningssystem med event

Skapa en klass BookingSystem som har ett event BookingConfirmed.
När man anropar ConfirmBooking(string name), trigga ett event som skickar med kundens namn och tidpunkt.
En annan klass BookingLogger lyssnar och skriver ut loggmeddelande.

Tips: Använd EventHandler<BookingEventArgs> där BookingEventArgs innehåller namn och DateTime.


🧪 Övning 6 – Spelsystem med flera events

Skapa ett system med följande klasser:

  • GameCharacter med events: OnHealthChanged, OnDied
  • UI som lyssnar på OnHealthChanged och visar nytt HP
  • Logger som lyssnar på båda events och skriver logg

Låt karaktären ta skada och trigga events. Visa hur flera lyssnare kan reagera olika.


🧩 Bonusutmaning

🧠 Observer Pattern med delegates/events

Skapa ett generellt Observer Pattern-system med:

  • Ett Publisher-objekt som har ett OnUpdate-event
  • Flera Subscriber-objekt som prenumererar
  • Publisher skickar ut uppdateringar till alla lyssnare

Du kan göra detta med egna delegates, och sedan refaktorera till EventHandler.