Le mot-clé 'params'
Fait partie de la section Programmation Orientée Objet du Journey C# de Coddy — leçon 47 sur 70.
Le mot-clé params permet à une méthode d'accepter un nombre variable d'arguments du même type. Au lieu d'exiger que les appelants créent un tableau manuellement, ils peuvent passer les arguments directement, séparés par des virgules.
Placez params avant un paramètre de tableau dans la signature de la méthode :
public static int Sum(params int[] numbers)
{
int total = 0;
foreach (int n in numbers)
total += n;
return total;
}
// Tous ces appels fonctionnent
Console.WriteLine(Sum(1, 2)); // 3
Console.WriteLine(Sum(1, 2, 3, 4, 5)); // 15
Console.WriteLine(Sum()); // 0 (tableau vide)Le compilateur enveloppe automatiquement les arguments dans un tableau. Vous pouvez également passer directement un tableau existant si vous en avez déjà un :
int[] values = { 10, 20, 30 };
Console.WriteLine(Sum(values)); // 60Il y a quelques règles à retenir : une méthode ne peut avoir qu'un seul paramètre params, et il doit être le dernier paramètre de la liste. Vous pouvez le combiner avec des paramètres réguliers :
public static void Log(string prefix, params object[] items)
{
foreach (var item in items)
Console.WriteLine(prefix + item);
}
Log("Item: ", "Apple", 42, true);Le mot-clé params rend les API plus flexibles et plus conviviales pour l'appelant, c'est pourquoi vous le voyez dans des méthodes comme Console.WriteLine et string.Format.
Défi
FacileConstruisons un formateur de messages flexible qui utilise le mot-clé params pour gérer n'importe quel nombre de valeurs. Vous allez créer une classe utilitaire capable de formater des messages avec des arguments variables, démontrant ainsi comment params rend les méthodes plus polyvalentes et plus conviviales pour l'appelant.
Vous organiserez votre code sur deux fichiers :
MessageFormatter.cs: Créez une classeMessageFormatterdans l'espace de nomsFormattingavec deux méthodes utilisantparams:Combine(params string[] parts)- joint toutes les chaînes fournies avec un espace entre elles et renvoie le résultatFormatList(string label, params int[] numbers)- combine un paramètre régulier avec un tableauparams. Elle doit renvoyer le libellé suivi d'un deux-points, puis tous les nombres séparés par des virgules (par exemple,Scores: 85, 90, 78)
Program.cs: Dans votre fichier principal, démontrez les deux méthodes avec des entrées. Lisez une chaîne de caractères pour le libellé, puis lisez une ligne d'entiers séparés par des virgules. UtilisezCombinepour joindre trois mots fixes, et utilisezFormatListpour afficher le libellé avec les nombres.
Vous recevrez deux entrées :
- Une chaîne de caractères pour le libellé (par exemple,
Scores) - Une liste d'entiers séparés par des virgules (par exemple,
85,90,78,92)
Tout d'abord, appelez Combine avec les mots "Hello", "params", et "world!" et affichez le résultat. Ensuite, analysez les entiers séparés par des virgules pour les transformer en tableau et appelez FormatList avec le libellé et le tableau d'entiers, en affichant également ce résultat.
Par exemple, si les entrées sont Scores et 85,90,78, la sortie devrait être :
Hello params world!
Scores: 85, 90, 78Remarquez comment Combine accepte n'importe quel nombre de chaînes directement, tandis que FormatList montre que vous pouvez mélanger des paramètres réguliers avec params - le paramètre params doit simplement arriver en dernier. Vous pouvez également passer un tableau existant à une méthode params, ce qui est exactement ce que vous ferez avec les entiers analysés !
Aide-mémoire
Le mot-clé params permet à une méthode d'accepter un nombre variable d'arguments du même type sans obliger les appelants à créer manuellement un tableau :
public static int Sum(params int[] numbers)
{
int total = 0;
foreach (int n in numbers)
total += n;
return total;
}
// Tous ces appels fonctionnent
Console.WriteLine(Sum(1, 2)); // 3
Console.WriteLine(Sum(1, 2, 3, 4, 5)); // 15
Console.WriteLine(Sum()); // 0 (tableau vide)Vous pouvez passer directement un tableau existant à une méthode params :
int[] values = { 10, 20, 30 };
Console.WriteLine(Sum(values)); // 60Règles pour params :
- Une méthode ne peut avoir qu'un seul paramètre
params - Il doit être le dernier paramètre de la liste
- Il peut être combiné avec des paramètres réguliers
public static void Log(string prefix, params object[] items)
{
foreach (var item in items)
Console.WriteLine(prefix + item);
}
Log("Item: ", "Apple", 42, true);Essayez vous-même
using System;
using Formatting;
class Program
{
public static void Main(string[] args)
{
// Lire les entrées
string label = Console.ReadLine();
string numbersInput = Console.ReadLine();
// TODO: Utiliser MessageFormatter.Combine avec "Hello", "params", et "world!"
// et afficher le résultat
// TODO: Analyser les entiers séparés par des virgules dans un tableau d'entiers
// Astuce : Diviser la chaîne et convertir chaque partie en entier
// TODO: Utiliser MessageFormatter.FormatList avec le label et le tableau d'entiers
// et afficher le résultat
}
}
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Programmation Orientée Objet
1Fondamentaux de la POO
Fichiers externesEspaces de noms et directivesIntro aux classes et objetsLe mot-clé 'this'Méthodes et paramètresChamps vs PropriétésConstructeursInitialiseurs d'objetsRécapitulatif - Calculatrice simple4Héritage
Syntaxe de base de l'héritage (:)Le mot-clé 'base'Mots-clés Virtual & OverrideClasses scelléesLa classe de base 'object'Récapitulatif - Hiérarchie des employés7Fonctionnalités avancées
Surcharge d'opérateursIndexeurs (this[])Redéfinition de ToString()Méthodes d'extensionRécapitulatif - Liste personnalisée10Patrons de conception - Partie 1
Introduction aux patrons de conceptionSingleton Thread-SafePatron FabriquePatron Observateur (Événements)Patron Stratégie2Propriétés et membres statiques
Propriétés auto-implémentéesPropriétés en lecture/écriture seuleChamps et méthodes statiquesClasses statiquesMembres à corps d'expression5Polymorphisme & Interfaces
Polymorphisme : Compilation vs ExécutionInterface vs Classe AbstraiteInterfaces MultiplesInterfaces ExplicitesUpcasting & DowncastingRécapitulatif - Calculateur de Formes8Concepts avancés de la POO
Composition plutôt qu'héritageGénériques (Classes et Méthodes)Délégués et ÉvénementsAttributs et RéflexionIDisposable et l'instruction usingBases de l'Injection de Dépendances11Patrons de conception, Partie 2
Patron CommandePatron AdaptateurPatron DécorateurPatron Méthode TemplatePatron ÉtatPatron Composite3Architecture des classes
Données d'instance vs statiquesMots-clés 'readonly' & 'const'Champs de supportRécapitulatif - Gestionnaire de compte bancaire6Encapsulation
Modificateurs d'accèsPropriétés pour l'encapsulationImplémentation du masquage de donnéesPatterns d'immuabilitéRécapitulatif - Dossiers d'étudiants12Projet : Système de gestion de bibliothèque
Structure du projetModèles Livre et Utilisateur