La parola chiave 'params'
Fa parte della sezione Programmazione orientata agli oggetti del percorso C# di Coddy. Lezione 47 di 70.
La parola chiave params consente a un metodo di accettare un numero variabile di argomenti dello stesso tipo. Invece di richiedere a chi chiama di creare manualmente un array, permette di passare direttamente gli argomenti, separati da virgole.
Inserisci params prima di un parametro array nella firma del metodo:
public static int Sum(params int[] numbers)
{
int total = 0;
foreach (int n in numbers)
total += n;
return total;
}
// Todas estas llamadas funcionan
Console.WriteLine(Sum(1, 2)); // 3
Console.WriteLine(Sum(1, 2, 3, 4, 5)); // 15
Console.WriteLine(Sum()); // 0 (arreglo vacío)Il compilatore racchiude automaticamente gli argomenti in un array. Puoi anche passare direttamente un array esistente, se ne hai già uno:
int[] values = { 10, 20, 30 };
Console.WriteLine(Sum(values)); // 60Ci sono alcune regole da ricordare: un metodo può avere un solo parametro params e deve essere l’ultimo parametro dell’elenco. Puoi combinarlo con parametri normali:
public static void Log(string prefix, params object[] items)
{
foreach (var item in items)
Console.WriteLine(prefix + item);
}
Log("Item: ", "Apple", 42, true);La parola chiave params rende le API più flessibili e pratiche per chi le chiama; per questo la trovi in metodi come Console.WriteLine e string.Format.
Sfida
FacileCostruiamo un formattatore di messaggi flessibile che usa la parola chiave params per gestire un numero qualsiasi di valori. Creerai una classe di utilità in grado di formattare messaggi con argomenti variabili, mostrando come params renda i metodi più versatili e comodi da usare per chi li chiama.
Organizzerai il codice in due file:
MessageFormatter.cs: crea una classeMessageFormatternello spazio dei nomiFormattingcon due metodi che usanoparams:Combine(params string[] parts)- unisce tutte le stringhe fornite, separandole con uno spazio, e restituisce il risultatoFormatList(string label, params int[] numbers)- combina un parametro normale con un arrayparams. Dovrebbe restituire l'etichetta seguita da due punti, quindi tutti i numeri separati da virgole (ad es.,Scores: 85, 90, 78)
Program.cs: nel file principale, mostra entrambi i metodi usando degli input. Leggi una stringa per l'etichetta, quindi leggi una riga di numeri interi separati da virgole. UsaCombineper unire tre parole fisse e usaFormatListper visualizzare l'etichetta con i numeri.
Riceverai due input:
- Una stringa per l'etichetta (ad es.,
Scores) - Un elenco di numeri interi separati da virgole (ad es.,
85,90,78,92)
Per prima cosa, chiama Combine con le parole "Hello", "params" e "world!" e stampa il risultato. Poi analizza i numeri interi separati da virgole inserendoli in un array e chiama FormatList con l'etichetta e l'array di numeri interi, stampando anche questo risultato.
Per esempio, se gli input sono Scores e 85,90,78, l'output dovrebbe essere:
Hello params world!
Scores: 85, 90, 78Nota come Combine accetti direttamente un numero qualsiasi di stringhe, mentre FormatList mostra che puoi mescolare parametri normali e params: il parametro params deve semplicemente essere l'ultimo. Puoi anche passare un array esistente a un metodo params, ed è proprio quello che farai con i numeri interi analizzati!
Provalo tu
using System;
using Formatting;
class Program
{
public static void Main(string[] args)
{
// Leggi gli input
string label = Console.ReadLine();
string numbersInput = Console.ReadLine();
// TODO: Usa MessageFormatter.Combine con "Hello", "params" e "world!"
// e stampa il risultato
// TODO: Converti gli interi separati da virgole in un array di int
// Suggerimento: dividi la stringa e converti ogni parte in int
// TODO: Usa MessageFormatter.FormatList con label e l'array di int
// e stampa il risultato
}
}
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Programmazione orientata agli oggetti
1Fondamenti della programmazione orientata agli oggetti
File esterniNamespace e direttiveIntroduzione a classi e oggettiLa parola chiave "this"Metodi e parametriCampi e proprietàCostruttoriInizializzatori di oggettiRiepilogo - Calcolatrice semplice4Ereditarietà
Sintassi di base dell'ereditarietà (:)La parola chiave 'base'Parole chiave virtual e overrideClassi sealedLa classe base 'object'Riepilogo - Gerarchia dei dipendenti7Funzionalità avanzate
Sovraccarico degli operatoriIndicizzatori (this[])Override di ToString()Metodi di estensioneRiepilogo - Lista personalizzata10Pattern di progettazione Parte 1
Introduzione ai pattern di progettazioneSingleton thread-safePattern FactoryPattern Observer (eventi)Pattern Strategy2Proprietà e membri statici
Proprietà implementate automaticamenteProprietà di sola lettura e di sola scritturaCampi e metodi staticiClassi staticheMembri con corpo di espressione5Polimorfismo e interfacce
Polimorfismo a compile time e runtimeInterfaccia o classe astrattaInterfacce multipleInterfacce espliciteUpcasting e downcastingRipasso: calcolatore di forme8Concetti avanzati di programmazione a oggetti
Composizione invece dell'ereditarietàTipi generici (classi e metodi)Delegati ed eventiAttributi e reflectionIDisposable e istruzione usingNozioni di base sull'iniezione delle dipendenze11Pattern di progettazione, parte 2
Pattern del ComandoPattern dell’AdattatorePattern del DecoratorePattern Template MethodPattern dello StatoPattern Composito3Architettura delle classi
Dati di istanza vs staticiParole chiave 'readonly' e 'const'Campi di supportoRiepilogo - Gestore di conti bancari6Incapsulamento
Modificatori di accessoProprietà per l'incapsulamentoImplementazione dell'occultamento dei datiModelli di immutabilitàRiepilogo - Registri degli studenti9Argomenti variabili
La parola chiave 'params'Parametri opzionaliArgomenti con nomeOverloading dei metodiEsercitati da solo: Compilatore C# online