// ----------------------------------------------------------------------------// 1. BEISPIEL: ICEBREAKER & SYSTEM-HACKS (FUNC & ACTION)// ----------------------------------------------------------------------------// Kontext:// Ein Netrunner dringt in gesicherte Megacorp-Server ein. Um Schutzprogramme// (ICE - Intrusion Countermeasure Electronics) zu ueberwinden, fuehrt das// Cyberdeck dynamische Hacking-Routinen aus.// Anstatt fuer jede Operation ein eigenes delegate zu deklarieren, soll das// Cyberdeck die vordefinierten generischen Delegatetypen Func<...> fuer// Berechnungen und Action<...> fuer Status- und Alertmeldungen verwenden.// 1.1) Aufgabenstellung IceBreaker://// Verwenden Sie fuer Berechnungsroutinen den vordefinierten generischen// Typ Func<IceBreaker, int, int>. Die Funktion nimmt einen IceBreaker// sowie einen int-Wert (firewallDefense bzw. securityTier) entgegen und// liefert einen Durchdringungswert (int) zurueck.public class IceBreaker { public string ToolName { get; init; } = string.Empty; public int BasePenetration { get; init; } public int MemoryCost { get; init; } public int[] IceProfiles { get; } = new int[3];}public class CyberDeckDevice { public int AvailableMemory { get; set; } = 16; public int SecurityAlertLevel { get; set; } = 0;}// 1.1a) Implementieren Sie eine Klasse HackSimulator mit folgenden Methoden:// Verwenden Sie für BreachAngriffe den Typ Func<IceBreaker, int, int>// Verwenden Sie fuer Alarmierungen den Typ Action<string, int>, welcher// den Systemnamen (string) und das Trace-Level (int) verarbeitet.public class HackSimulator {// 1. Methode TestBreach(IceBreaker tool, int firewallDefense):// Dient Testlaeufen im Simulator. Unabhaengig vom Tool und der// Firewall liefert die Methode immer genau den Testwert 100 zurueck.//// 2. Methode OverclockedBreach(IceBreaker tool, int firewallDefense):// Berechnet die Durchdringung: Verdoppeln Sie tool.BasePenetration// und ziehen Sie firewallDefense ab. Ist das Ergebnis groesser als 0,// wird dieser Wert zurueckgegeben, andernfalls 0.//// 3. Methode ProfileBreach(IceBreaker tool, int securityTier):// Ermittelt anhand der Sicherheitsstufe (securityTier von 1 bis 12)// den Profil-Index:// - 0 < securityTier <= 4 => Index 0// - 4 < securityTier <= 8 => Index 1// - 8 < securityTier <= 12 => Index 2// Liegt der securityTier ausserhalb von 1 bis 12, wird 0 geliefert.// Multiplizieren Sie tool.IceProfiles[index] mit tool.BasePenetration// und geben Sie das Ergebnis zurueck.////// 4. Methode AlertSecurity(string systemName, int threatLevel):// Gibt auf der Konsole folgenden Text aus:// [TRACE ALERT] System: {systemName} | Threat Level: {threatLevel}}// 1.1c) Ergaenzen Sie die gegebene Klasse IceBreaker um folgende Properties:// - BreachRoutine { get; set; }: Speichern von Methoden vom Typ Func<IceBreaker, int, int>// - OnSecurityAlert { get; set; }: Speichern von Methoden vom Typ Action<string, int>// 1.1d) Schreiben Sie im Projekt CyberDeckTest eine Testklasse IceBreakerTests:// - Instanziieren Sie einen IceBreaker.// - Testen Sie TestBreach, OverclockedBreach und ProfileBreach durch// Zuweisung an die Property BreachRoutine.// - Pruefen Sie die Berechnungen mit Assert.That(...).// - Testen Sie die Ausfuehrung von OnSecurityAlert (auch als Multicast +=).