CSharp

L1 Delegater grunder

🎓 Lektion 1: Grunderna i Delegates – Vad är en delegate och hur fungerar den?


🔍 Vad du kommer att lära dig idag:

  • Vad en delegate är
  • Hur man deklarerar en delegate
  • Hur man använder en delegate för att anropa en metod
  • Varför delegates är användbara i C#

🧠 Vad är en delegate?

En delegate är en typ som kan hålla en referens till en metod.
Det är som en "funktionpekare" från andra språk, men typ- och säkerhetskontrollerad i C#.

Med en delegate kan du:

  • Skicka metoder som argument
  • Växla mellan olika metoder dynamiskt
  • Anropa metoder utan att veta exakt vilken metod som ska användas

🧪 Första exemplet – en enkel delegate

using System;

public class Program
{
    // 1. Deklarera en delegate
    public delegate void MyDelegate(string text);

    // 2. En metod som matchar delegate-signaturen
    public static void PrintMessage(string message)
    {
        Console.WriteLine("Meddelande: " + message);
    }

    public static void Main()
    {
        // 3. Skapa en instans av delegaten
        MyDelegate del = PrintMessage;

        // 4. Anropa metoden via delegaten
        del("Hej från en delegate!");
    }
}

🧩 Så här fungerar det:

Del Förklaring
public delegate void MyDelegate(string text) En delegate-typ som kan peka på metoder som tar en string och returnerar void
PrintMessage En metod med samma signatur
MyDelegate del = PrintMessage Skapar en delegate-instans som pekar på metoden
del("Hej") Anropar metoden via delegaten

🛠️ Testa själv

👉 Skapa en ny delegate som heter MathOperation som tar två int och returnerar en int.

Skriv två metoder:

  • Add(int a, int b) – returnerar summan
  • Multiply(int a, int b) – returnerar produkten

Testa att tilldela båda metoderna till en MathOperation-delegate och anropa dem.

Exempel:

public delegate int MathOperation(int a, int b);

public static int Add(int a, int b) => a + b;
public static int Multiply(int a, int b) => a * b;

static void Main()
{
    MathOperation op = Add;
    Console.WriteLine(op(3, 4)); // 7

    op = Multiply;
    Console.WriteLine(op(3, 4)); // 12
}

🎯 Reflektion

Fundera på:

  • Hur kan det vara användbart att kunna byta ut vilken metod som anropas i efterhand?
  • Hur skulle detta kunna användas t.ex. i en meny eller som en strategi?

✅ Vad du har lärt dig

✔ Vad en delegate är
✔ Hur du skapar och använder en delegate
✔ Hur en delegate pekar på metoder med samma signatur
✔ Hur du kan växla dynamiskt mellan olika metoder