Aufgaben-Python/courses/csharp/12_exception_handling_und_ressourcen
2026-09-12 13:26:06 +02:00
..
Aufgabe.cs IHK AP1 & AP2 (FISI) Crashkurse: Vollständige Lernfeld-Module (LF 1-12), 150 IHK-Prüfungsfragen, interaktive Prüfungs-Engine und Multi-Sprachen-Erweiterung (PDFs excluded) 2026-09-10 07:43:39 +02:00
index.html Branding-Update für it-praxisportal.de: Neuer Hero-Bereich, SVG-Favicon, OpenGraph-Metadaten und Plattform-Titel 2026-09-12 13:26:06 +02:00
Musterloesung.cs IHK AP1 & AP2 (FISI) Crashkurse: Vollständige Lernfeld-Module (LF 1-12), 150 IHK-Prüfungsfragen, interaktive Prüfungs-Engine und Multi-Sprachen-Erweiterung (PDFs excluded) 2026-09-10 07:43:39 +02:00
README.md IHK AP1 & AP2 (FISI) Crashkurse: Vollständige Lernfeld-Module (LF 1-12), 150 IHK-Prüfungsfragen, interaktive Prüfungs-Engine und Multi-Sprachen-Erweiterung (PDFs excluded) 2026-09-10 07:43:39 +02:00
TestAufgabe.cs IHK AP1 & AP2 (FISI) Crashkurse: Vollständige Lernfeld-Module (LF 1-12), 150 IHK-Prüfungsfragen, interaktive Prüfungs-Engine und Multi-Sprachen-Erweiterung (PDFs excluded) 2026-09-10 07:43:39 +02:00

C# 12: Exception Handling & Ressourcenverwaltung (IDisposable) 🛡️

Willkommen zu Modul 12! In diesem Kapitel lernst du professionelle Fehlerbehandlung und deterministisches Ressourcenmanagement nach Enterprise-.NET-Standards.


💡 1. Das Wichtigste in Kürze

Eigene Domain Exceptions

Ausnahmen sollten fachliche Fehler ausdrücken und dem Aufrufer relevante Kontextdaten bereitstellen:

public class InsufficientFundsException : BankDomainException
{
    public Guid AccountId { get; }
    public decimal RequestedAmount { get; }
    public decimal CurrentBalance { get; }

    public InsufficientFundsException(Guid accountId, decimal requestedAmount, decimal currentBalance)
        : base($"Konto {accountId} hat unzureichende Deckung ({currentBalance:C}). Gefordert: {requestedAmount:C}")
    {
        AccountId = accountId;
        RequestedAmount = requestedAmount;
        CurrentBalance = currentBalance;
    }
}

Exception Filters (when)

Mit when entscheidest du im catch-Block anhand von Bedingungen, ob die Exception gefangen werden soll:

catch (InsufficientFundsException ex) when (ex.RequestedAmount > 10_000m)
{
    // Greift nur bei Großtransaktionen
}

Das IDisposable Muster & using Declarations

Seit C# 8 reicht die schlanke Syntax using var resource = ..., die das Objekt am Ende des aktuellen Gültigkeitsbereichs automatisch entsorgt:

{
    using var scope = new AuditTransactionScope("TX-1234");
    // scope.Dispose() wird beim Verlassen dieses Blocks garantiert aufgerufen!
}

🎯 Teilziele in Aufgabe.cs

  1. TODO 1: Exception-Klassenhierarchie
    Erstelle BankDomainException, AccountNotFoundException und InsufficientFundsException.

  2. TODO 2: AuditTransactionScope : IDisposable
    Implementiere die IDisposable-Schnittstelle mit Statusfeld _disposed und werfe ObjectDisposedException, wenn auf ein bereits freigegebenes Objekt zugegriffen wird.

  3. TODO 3: BankAccount Entität
    Implementiere Deposit(decimal amount) und Withdraw(decimal amount) mit entsprechenden Exception-Prüfungen.

  4. TODO 4: BankTransferService.TransferFunds
    Implementiere atomare Überweisungen mit using var scope und Exception Handling.