CSharp

L5 Ett helt system

🎓 Lektion 5: Ett komplett system med events och delegates


🎯 Mål:

Du ska använda dina nya kunskaper för att bygga ett mini-system där flera objekt kommunicerar via events och delegates, på ett rent och .NET-standardiserat sätt.


🛠️ Vad vi ska bygga:

Ett enkelt larmsystem:

  • En Sensor upptäcker rörelse
  • Ett AlarmSystem reagerar på sensorn
  • Ett Logger-objekt loggar alla händelser
  • Alla komponenter kopplas ihop med events (EventHandler/EventArgs)

🧱 Steg 1: EventArgs för händelsen

public class MotionDetectedEventArgs : EventArgs
{
    public DateTime TimeStamp { get; }

    public MotionDetectedEventArgs()
    {
        TimeStamp = DateTime.Now;
    }
}

🧱 Steg 2: Sensorklass

public class MotionSensor
{
    public event EventHandler<MotionDetectedEventArgs> MotionDetected;

    public void Detect()
    {
        Console.WriteLine("🔍 Sensor: Rörelse upptäckt!");
        MotionDetected?.Invoke(this, new MotionDetectedEventArgs());
    }
}

🧱 Steg 3: AlarmSystem och Logger

public class AlarmSystem
{
    public void OnMotionDetected(object sender, MotionDetectedEventArgs e)
    {
        Console.WriteLine($"🚨 LARM! Rörelse upptäckt {e.TimeStamp:T}");
    }
}

public class Logger
{
    public void OnMotionDetected(object sender, MotionDetectedEventArgs e)
    {
        Console.WriteLine($"📝 Logg: Rörelse registrerad kl {e.TimeStamp:T}");
    }
}

🧱 Steg 4: Programmet

class Program
{
    static void Main()
    {
        var sensor = new MotionSensor();
        var alarm = new AlarmSystem();
        var logger = new Logger();

        // Koppla ihop lyssnarna
        sensor.MotionDetected += alarm.OnMotionDetected;
        sensor.MotionDetected += logger.OnMotionDetected;

        // Simulera händelser
        sensor.Detect();
        Console.ReadKey();
    }
}

💡 Möjliga utvecklingar

Vill du bygga vidare på det här kan du:

  • Lägga till flera olika typer av sensorer
  • Skicka olika nivåer av larm (t.ex. "mild", "kritisk")
  • Koppla loss prenumeranter dynamiskt
  • Logga till fil, UI eller nätverk

✅ Sammanfattning av allt du lärt dig i serien

Lektion Fokus
1 Grunder i delegates – hur man pekar på metoder
2 Multicast delegates och delegates som parametrar
3 Vad events är och hur de används
4 EventHandler och EventArgs – standardmönstret
5 Ett komplett mini-system med events i praktiken

🎉 Bra jobbat!

Du har nu ett stabilt grepp om hur delegates och events fungerar i C#, både på teknisk och praktisk nivå. Det du lärt dig här är grunden för eventdriven programmering, särskilt i UI-program (t.ex. WPF/WinForms), spelutveckling (Unity/Godot) och backend-tjänster.