CSharp

L7 Quiz

🧠 Quiz: Delegates och Events i C#

🔹 Del 1: Flervalsfrågor (1 poäng per fråga)

1. Vad är en delegate i C#?
A) En typ som kan lagra strängar
B) En typ som refererar till en metod
C) En metod som är statisk
D) En klass för att skicka e-post

2. Vad händer när man anropar en multicast delegate med flera metoder kopplade till sig?
A) Endast den första metoden körs
B) Alla metoder körs i slumpmässig ordning
C) Alla metoder körs i den ordning de kopplades in
D) Det kastas ett undantag

3. Vilken syntax används för att prenumerera på ett event?
A) event += handler;
B) event = handler;
C) event(handler);
D) delegate += event;

4. Vad gör ?.Invoke() i samband med events?
A) Stoppar exekveringen
B) Garanterar att eventet bara körs en gång
C) Kontrollerar om det finns några lyssnare innan eventet triggas
D) Tar bort alla prenumeranter


🔹 Del 2: Kodförståelse (2 poäng per fråga)

5. Vad skriver följande kod ut?

public delegate void MyDelegate();
public class Program
{
    public static void Hello() => Console.WriteLine("Hej");
    public static void Bye() => Console.WriteLine("Hejdå");

    static void Main()
    {
        MyDelegate del = Hello;
        del += Bye;
        del();
    }
}

6. Vad är felet (om något) i den här koden?

public class Button
{
    public event Action OnPressed;

    public void Press()
    {
        OnPressed(); // <-- här
    }
}

7. Vad returnerar den här metoden?

public static int Calculate(int a, int b, Func<int, int, int> op)
{
    return op(a, b);
}

static void Main()
{
    var result = Calculate(3, 4, (x, y) => x * y);
    Console.WriteLine(result);
}

🔹 Del 3: Kort svar (2–3 meningar)

8. Förklara skillnaden mellan en delegate och ett event.


9. Varför används EventHandler<T> istället för att skapa egna delegate-typer?


10. Vad betyder det att en klass prenumererar på ett event?

Facit: Delegates och Events i C#

🔹 Del 1: Flervalsfrågor

1. Vad är en delegate i C#?
B) En typ som refererar till en metod

2. Vad händer när man anropar en multicast delegate med flera metoder kopplade till sig?
C) Alla metoder körs i den ordning de kopplades in

3. Vilken syntax används för att prenumerera på ett event?
A) event += handler;

4. Vad gör ?.Invoke() i samband med events?
C) Kontrollerar om det finns några lyssnare innan eventet triggas


🔹 Del 2: Kodförståelse

5. Vad skriver följande kod ut?

Hej  
Hejdå

Förklaring: Det är en multicast delegate där båda metoderna är kopplade.


6. Vad är felet (om något) i den här koden?

OnPressed(); // ❌ Fel: eventet kan vara null

Rätt svar: Man måste kontrollera om OnPressed har några prenumeranter innan man anropar det:

OnPressed?.Invoke();

7. Vad returnerar den här metoden?

3 * 4 = ✅ **12**

🔹 Del 3: Kort svar

8. Förklara skillnaden mellan en delegate och ett event.
✔ En delegate är en typ som kan referera till en eller flera metoder.
✔ Ett event är en säkerhetsmekanism kring en delegate – endast den klass där eventet är deklarerat kan trigga det, medan andra klasser kan prenumerera.


9. Varför används EventHandler<T> istället för att skapa egna delegate-typer?
✔ För att följa .NET-standard, vilket gör koden mer läsbar och kompatibel med verktyg, bibliotek och andra utvecklare.
✔ Den innehåller sender och en EventArgs-baserad dataklass vilket ger struktur.


10. Vad betyder det att en klass prenumererar på ett event?
✔ Det betyder att klassen lägger till en metod som ska köras när eventet triggas.
✔ Detta görs med +=, vilket kopplar metoden till eventkedjan.t