Das Schlüsselwort 'params'
Teil des Abschnitts Objektorientierte Programmierung der C#-Journey von Coddy. Lektion 47 von 70.
Das Schlüsselwort params ermöglicht es einer Methode, eine variable Anzahl von Argumenten desselben Typs zu akzeptieren. Anstatt von den Aufrufern zu verlangen, manuell ein Array zu erstellen, können sie Argumente direkt übergeben, getrennt durch Kommas.
Platzieren Sie params vor einem Array-Parameter in der Methodensignatur:
public static int Sum(params int[] numbers)
{
int total = 0;
foreach (int n in numbers)
total += n;
return total;
}
// Alle diese Aufrufe funktionieren
Console.WriteLine(Sum(1, 2)); // 3
Console.WriteLine(Sum(1, 2, 3, 4, 5)); // 15
Console.WriteLine(Sum()); // 0 (leeres Array)Der Compiler packt die Argumente automatisch in ein Array. Sie können auch direkt ein bestehendes Array übergeben, wenn Sie bereits eines haben:
int[] values = { 10, 20, 30 };
Console.WriteLine(Sum(values)); // 60Es gibt ein paar Regeln zu beachten: Eine Methode kann nur einen params-Parameter haben, und dieser muss der letzte Parameter in der Liste sein. Sie können ihn mit regulären Parametern kombinieren:
public static void Log(string prefix, params object[] items)
{
foreach (var item in items)
Console.WriteLine(prefix + item);
}
Log("Item: ", "Apple", 42, true);Das Schlüsselwort params macht APIs flexibler und benutzerfreundlicher, weshalb man es in Methoden wie Console.WriteLine und string.Format findet.
Aufgabe
EinfachErstellen wir einen flexiblen Nachrichtenformatierer, der das Schlüsselwort params verwendet, um eine beliebige Anzahl von Werten zu verarbeiten. Du erstellst eine Hilfsklasse, die Nachrichten mit variablen Argumenten formatieren kann, und zeigst dabei, wie params Methoden vielseitiger und benutzerfreundlicher für Aufrufer macht.
Du wirst deinen Code auf zwei Dateien aufteilen:
MessageFormatter.cs: Erstelle eineMessageFormatter-Klasse im NamespaceFormattingmit zwei Methoden, dieparamsverwenden:Combine(params string[] parts)– fügt alle bereitgestellten Zeichenfolgen mit einem Leerzeichen dazwischen zusammen und gibt das Ergebnis zurückFormatList(string label, params int[] numbers)– kombiniert einen regulären Parameter mit einemparams-Array. Die Methode soll das Label gefolgt von einem Doppelpunkt und anschließend alle durch Kommas getrennten Zahlen zurückgeben (z. B.Scores: 85, 90, 78)
Program.cs: Zeige in deiner Hauptdatei beide Methoden mit Eingaben. Lies eine Label-Zeichenfolge und anschließend eine Zeile mit durch Kommas getrennten Ganzzahlen ein. VerwendeCombine, um drei festgelegte Wörter zusammenzufügen, undFormatList, um das Label mit den Zahlen anzuzeigen.
Du erhältst zwei Eingaben:
- Eine Label-Zeichenfolge (z. B.
Scores) - Eine durch Kommas getrennte Liste von Ganzzahlen (z. B.
85,90,78,92)
Rufe zuerst Combine mit den Wörtern "Hello", "params" und "world!" auf und gib das Ergebnis aus. Analysiere dann die durch Kommas getrennten Ganzzahlen in ein Array und rufe FormatList mit dem Label und dem Ganzzahlen-Array auf. Gib auch dieses Ergebnis aus.
Wenn die Eingaben beispielsweise Scores und 85,90,78 lauten, sollte die Ausgabe wie folgt aussehen:
Hello params world!
Scores: 85, 90, 78Beachte, wie Combine direkt eine beliebige Anzahl von Zeichenfolgen akzeptiert, während FormatList zeigt, dass du reguläre Parameter mit params kombinieren kannst – der params-Parameter muss lediglich an letzter Stelle stehen. Du kannst auch ein vorhandenes Array an eine params-Methode übergeben. Genau das wirst du mit den analysierten Ganzzahlen tun!
Probier es selbst
using System;
using Formatting;
class Program
{
public static void Main(string[] args)
{
// Eingaben lesen
string label = Console.ReadLine();
string numbersInput = Console.ReadLine();
// TODO: Verwende MessageFormatter.Combine mit "Hello", "params" und "world!"
// und gib das Ergebnis aus
// TODO: Parse die durch Kommas getrennten Ganzzahlen in ein int-Array
// Hinweis: Teile den String auf und konvertiere jeden Teil in ein int
// TODO: Verwende MessageFormatter.FormatList mit dem label und dem int-Array
// und gib das Ergebnis 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