Benannte Argumente
Teil des Abschnitts Objektorientierte Programmierung der C#-Journey von Coddy. Lektion 49 von 70.
Benannte Argumente ermöglichen es dir, mithilfe des Parameternamens anzugeben, welcher Parameter einen Wert erhält, statt dich auf die Position zu verlassen. Dadurch werden Methodenaufrufe übersichtlicher, und du kannst Argumente in beliebiger Reihenfolge übergeben.
Verwende den Parameternamen gefolgt von einem Doppelpunkt vor dem Wert:
public static void CreateUser(string name, int age, bool isActive)
{
Console.WriteLine($"{name}, Age: {age}, Active: {isActive}");
}
// Benannte Argumente verwenden
CreateUser(name: "Alice", age: 25, isActive: true);
CreateUser(age: 30, isActive: false, name: "Bob"); // Beliebige Reihenfolge funktioniertBenannte Argumente sind besonders nützlich in Kombination mit optionalen Parametern. Anstatt alle vorangehenden optionalen Werte anzugeben, kannst du direkt zu dem benötigten Wert springen:
public static void Configure(string host, int port = 8080, bool useSSL = false, int timeout = 30)
{
Console.WriteLine($"{host}:{port}, SSL: {useSSL}, Timeout: {timeout}");
}
// Port und useSSL überspringen, nur timeout angeben
Configure("localhost", timeout: 60);
Configure("server.com", useSSL: true);Du kannst Positions- und benannte Argumente mischen, aber Positionsargumente müssen zuerst kommen. Benannte Argumente verbessern die Lesbarkeit, insbesondere bei Methoden mit mehreren Parametern desselben Typs oder booleschen Flags, deren Bedeutung allein aus dem Wert nicht offensichtlich ist.
Aufgabe
EinfachErstellen wir einen Report-Generator, der benannte Argumente nutzt, um Methodenaufrufe völlig eindeutig zu machen. Wenn Methoden mehrere Parameter haben – insbesondere solche desselben Typs oder boolesche Flags –, machen benannte Argumente deinen Code selbstdokumentierend.
Du organisierst deinen Code über zwei Dateien:
ReportGenerator.cs: Erstelle eineReportGenerator-Klasse im NamespaceReportsmit einer Methode, die mehrere optionale Parameter besitzt:GenerateReport(string title, string author = "Anonymous", bool includeHeader = true, bool includeSummary = false, int maxPages = 10)- Diese Methode soll eine formatierte Zeichenfolge zurückgeben, die die Konfiguration des Reports beschreibt
- Format:
Report: {title} by {author} | Header: {Yes/No}, Summary: {Yes/No}, Max Pages: {maxPages}
Program.cs: Zeige in deiner Hauptdatei die Leistungsfähigkeit benannter Argumente, indem duGenerateReportauf unterschiedliche Weise aufrufst – überspringe optionale Parameter, die du nicht benötigst, und gib für jeden Report nur die relevanten Parameter an.
Du erhältst drei Eingaben:
- Titel des ersten Reports
- Titel des zweiten Reports
- Titel des dritten Reports
Erzeuge drei Reports mit unterschiedlichen Konfigurationen:
- Erster Report: Verwende nur den Titel (alle Standardwerte werden angewendet)
- Zweiter Report: Verwende den Titel mit
includeSummary: trueundmaxPages: 25(überspringe author und includeHeader, sodass deren Standardwerte beibehalten werden) - Dritter Report: Verwende den Titel mit
author: "Admin",includeHeader: falseundincludeSummary: true(behalte den Standardwert für maxPages bei)
Gib jedes Reportergebnis in einer eigenen Zeile aus.
Wenn die Eingaben beispielsweise Sales Q1, Annual Review und Inventory Check lauten, sollte die Ausgabe wie folgt aussehen:
Report: Sales Q1 by Anonymous | Header: Yes, Summary: No, Max Pages: 10
Report: Annual Review by Anonymous | Header: Yes, Summary: Yes, Max Pages: 25
Report: Inventory Check by Admin | Header: No, Summary: Yes, Max Pages: 10Beachte, wie du mit benannten Argumenten direkt zu den Parametern springen kannst, die dich interessieren – du musst author oder includeHeader nicht angeben, nur um includeSummary zu ändern. Dadurch werden deine Methodenaufrufe viel lesbarer und machen ihre Absicht deutlich!
Probier es selbst
using System;
using Reports;
class Program
{
public static void Main(string[] args)
{
// Lies die drei Berichtstitel
string title1 = Console.ReadLine();
string title2 = Console.ReadLine();
string title3 = Console.ReadLine();
// Erstelle eine ReportGenerator-Instanz
ReportGenerator generator = new ReportGenerator();
// TODO: Generiere den ersten Bericht – verwende nur den Titel (alle Standardwerte gelten)
// TODO: Generiere den zweiten Bericht – verwende Titel mit includeSummary: true und maxPages: 25
// (überspringe author und includeHeader und behalte deren Standardwerte)
// TODO: Generiere den dritten Bericht – verwende Titel mit author: "Admin", includeHeader: false und includeSummary: true
// (behalte den maxPages-Standardwert)
// Gib jedes Berichtsergebnis aus
}
}
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Objektorientierte Programmierung
1Grundlagen der OOP
Externe DateienNamespaces & DirektivenEinführung in Klassen & ObjekteDas 'this'-SchlüsselwortMethoden und ParameterFelder vs. EigenschaftenKonstruktorenObjektinitialisiererWiederholung – Einfacher Taschenrechner4Vererbung
Grundlegende Vererbungs-(:)-SyntaxDas „base“-Schlüsselwort„virtual“- und „override“-SchlüsselwörterVersiegelte KlassenDie „object“-BasisklasseWiederholung – Mitarbeiterhierarchie7Erweiterte Funktionen
Überladen von OperatorenIndexer (this[])ToString()-ÜberschreibungErweiterungsmethodenRückblick – Benutzerdefinierte Liste10Entwurfsmuster Teil 1
Einführung in EntwurfsmusterThread-sicheres SingletonFactory-MusterObserver-Muster (Events)Strategy-Muster13Abschließende Herausforderungen
E-Learning-PlattformKomponente für SpielfigurenFahrzeugvermietungsdienst2Eigenschaften & statische Member
Automatisch implementierte EigenschaftenNur lesbare/schreibbare EigenschaftenStatische Felder & MethodenStatische KlassenMember mit Ausdruckskörpern5Polymorphie & Interfaces
Compile- vs. Laufzeit-PolymorphieInterface vs. abstrakte KlasseMehrere InterfacesExplizite InterfacesUpcasting & DowncastingWiederholung – Formenrechner3Klassenarchitektur
Instanz- vs. statische DatenSchlüsselwörter 'readonly' & 'const'Backing FieldsRückblick – Bankkontenverwaltung6Kapselung
ZugriffsmodifikatorenEigenschaften zur KapselungImplementierung der DatenkapselungMuster für UnveränderlichkeitRückblick – Schülerdaten9Variable Argumente
Das Schlüsselwort 'params'Optionale ParameterBenannte ArgumenteMethodenüberladungÜbe selbstständig: Online-C#-Compiler