Optionale Parameter
Teil des Abschnitts Objektorientierte Programmierung der C#-Journey von Coddy — Lektion 48 von 70.
Optionale Parameter ermöglichen es Ihnen, Standardwerte für Methodenparameter zu definieren. Wenn ein Aufrufer keinen Wert für diesen Parameter angibt, wird automatisch der Standardwert verwendet.
Sie erstellen einen optionalen Parameter, indem Sie in der Methodensignatur einen Standardwert zuweisen:
public static void Greet(string name, string greeting = "Hello")
{
Console.WriteLine(greeting + ", " + name + "!");
}
// Beide Aufrufe funktionieren
Greet("Alice"); // Hello, Alice!
Greet("Bob", "Welcome"); // Welcome, Bob!Optionale Parameter müssen nach allen erforderlichen Parametern stehen. Sie können mehrere optionale Parameter definieren, und Aufrufer können beliebige Parameter von rechts weglassen:
public static void CreateUser(string name, int age = 0, bool isActive = true)
{
Console.WriteLine($"{name}, Age: {age}, Active: {isActive}");
}
CreateUser("Emma"); // Emma, Age: 0, Active: True
CreateUser("James", 25); // James, Age: 25, Active: True
CreateUser("Sarah", 30, false); // Sarah, Age: 30, Active: FalseStandardwerte müssen Kompilierzeit-Konstanten sein – Literale, const-Werte oder default-Ausdrücke. Sie können keine Variablen oder Methodenaufrufe als Standardwerte verwenden. Dies macht optionale Parameter ideal für Konfigurationseinstellungen und Methoden, bei denen die meisten Aufrufer gängige Werte verwenden.
Aufgabe
EinfachLassen Sie uns ein Benachrichtigungssystem bauen, das optionale Parameter verwendet, um eine flexible Nachrichtenformatierung zu ermöglichen. Sie werden eine Hilfsklasse erstellen, die Benachrichtigungen mit anpassbaren Einstellungen senden kann, wobei die meisten Aufrufer sinnvolle Standardwerte verwenden werden.
Sie werden Ihren Code auf zwei Dateien aufteilen:
NotificationService.cs: Erstellen Sie eine KlasseNotificationServiceim NamespaceNotificationsmit einer Methode, die optionale Parameter demonstriert:SendNotification(string message, string priority = "Normal", bool addTimestamp = true)– Diese Methode sollte einen formatierten Benachrichtigungs-String zurückgeben. WennaddTimestamptrue ist, stellen Sie der Nachricht[TIMESTAMP]voran. Das Format sollte sein:[Priority] Messageoder[TIMESTAMP] [Priority] Message, abhängig von der Zeitstempeleinstellung.
Program.cs: Demonstrieren Sie in Ihrer Hauptdatei, wie optionale Parameter funktionieren, indem SieSendNotificationauf drei verschiedene Arten aufrufen – unter Verwendung aller Standardwerte, durch Überschreiben eines Parameters und durch Überschreiben beider optionalen Parameter.
Sie erhalten drei Eingaben:
- Erste Nachricht (verwendet alle Standardwerte)
- Zweite Nachricht (verwendet die Priorität
"Urgent"mit Standard-Zeitstempel) - Dritte Nachricht (verwendet die Priorität
"Low"und keinen Zeitstempel)
Rufen Sie SendNotification dreimal auf und geben Sie jedes Ergebnis aus:
- Erster Aufruf: Übergeben Sie nur die erste Nachricht (verwendet Standardwerte:
"Normal"Priorität, Zeitstempel aktiviert) - Zweiter Aufruf: Übergeben Sie die zweite Nachricht mit der Priorität
"Urgent"(Zeitstempel bleibt standardmäßig auf true) - Dritter Aufruf: Übergeben Sie die dritte Nachricht mit der Priorität
"Low"undfalsefür den Zeitstempel
Wenn die Eingaben beispielsweise System started, Server overload und Cache cleared lauten, sollte die Ausgabe wie folgt aussehen:
[TIMESTAMP] [Normal] System started
[TIMESTAMP] [Urgent] Server overload
[Low] Cache clearedBeachten Sie, wie dieselbe Methode alle drei Szenarien elegant handhabt – Aufrufer geben nur das an, was sie gegenüber den Standardwerten ändern müssen!
Spickzettel
Optionale Parameter ermöglichen es Ihnen, Standardwerte für Methodenparameter zu definieren. Wenn ein Aufrufer keinen Wert angibt, wird automatisch der Standardwert verwendet.
Erstellen Sie einen optionalen Parameter, indem Sie in der Methodensignatur einen Standardwert zuweisen:
public static void Greet(string name, string greeting = "Hello")
{
Console.WriteLine(greeting + ", " + name + "!");
}
// Beide Aufrufe funktionieren
Greet("Alice"); // Hello, Alice!
Greet("Bob", "Welcome"); // Welcome, Bob!Optionale Parameter müssen nach allen erforderlichen Parametern stehen. Sie können mehrere optionale Parameter haben:
public static void CreateUser(string name, int age = 0, bool isActive = true)
{
Console.WriteLine($"{name}, Age: {age}, Active: {isActive}");
}
CreateUser("Emma"); // Emma, Age: 0, Active: True
CreateUser("James", 25); // James, Age: 25, Active: True
CreateUser("Sarah", 30, false); // Sarah, Age: 30, Active: FalseStandardwerte müssen Kompilierzeit-Konstanten sein – Literale, const-Werte oder default-Ausdrücke. Sie können keine Variablen oder Methodenaufrufe als Standardwerte verwenden.
Probier es selbst
using System;
using Notifications;
class Program
{
public static void Main(string[] args)
{
// Lies die drei Nachrichten
string message1 = Console.ReadLine();
string message2 = Console.ReadLine();
string message3 = Console.ReadLine();
// Erstelle eine Instanz von NotificationService
NotificationService service = new NotificationService();
// TODO: Rufe SendNotification dreimal auf und gib jedes Ergebnis aus:
// 1. Erster Aufruf: Übergib nur message1 (verwendet alle Standardwerte)
// 2. Zweiter Aufruf: Übergib message2 mit der Priorität "Urgent" (timestamp ist standardmäßig true)
// 3. Dritter Aufruf: Übergib message3 mit der Priorität "Low" und false für timestamp
}
}
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. EigenschaftenKonstruktorenObjekt-InitialisiererZusammenfassung - Einfacher Taschenrechner4Vererbung
Grundlagen der Vererbung (:) SyntaxDas 'base'-SchlüsselwortVirtual & Override SchlüsselwörterVersiegelte KlassenDie 'object'-BasisklasseZusammenfassung – Mitarbeiter-Hierarchie7Fortgeschrittene Funktionen
OperatorüberladungIndexer (this[])ToString() überschreibenErweiterungsmethodenZusammenfassung - Benutzerdefinierte Liste2Eigenschaften & Statische Member
Automatisch implementierte EigenschaftenRead-Only- & Write-Only-EigenschaftenStatische Felder & MethodenStatische KlassenExpression-Bodied Member5Polymorphismus & Interfaces
Compile- vs. Runtime-PolymorphismusInterface vs. abstrakte KlasseMehrfache InterfacesExplizite InterfacesUpcasting & DowncastingRecap – Shape Calculator3Klassenarchitektur
Instanz- vs. statische Daten'readonly' & 'const' SchlüsselwörterBacking FieldsZusammenfassung - Bankkonto-Manager6Kapselung
ZugriffsmodifikatorenProperties zur KapselungImplementierung von Data HidingImmutability-MusterRückblick – Studierendendaten9Variable Argumente
Das 'params'-SchlüsselwortOptionale ParameterBenannte ArgumenteMethodenüberladung