Parametri opzionali
Fa parte della sezione Programmazione orientata agli oggetti del percorso C# di Coddy. Lezione 48 di 70.
I parametri facoltativi consentono di definire valori predefiniti per i parametri dei metodi. Quando chi chiama il metodo non fornisce un valore per quel parametro, il valore predefinito viene utilizzato automaticamente.
Crei un parametro facoltativo assegnando un valore predefinito nella firma del metodo:
public static void Greet(string name, string greeting = "Hello")
{
Console.WriteLine(greeting + ", " + name + "!");
}
// Entrambe le chiamate funzionano
Greet("Alice"); // Hello, Alice!
Greet("Bob", "Welcome"); // Welcome, Bob!I parametri opzionali devono venire dopo tutti i parametri obbligatori. Puoi avere più parametri opzionali e chi chiama la funzione può ometterne alcuni a partire da destra:
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: FalseI valori predefiniti devono essere costanti in fase di compilazione: valori letterali, valori const o espressioni default. Non puoi usare variabili o chiamate a metodi come valori predefiniti. Questo rende i parametri facoltativi ideali per le impostazioni di configurazione e per i metodi in cui la maggior parte dei chiamanti usa valori comuni.
Sfida
FacileCreiamo un sistema di notifiche che utilizza parametri opzionali per offrire una formattazione flessibile dei messaggi. Creerai una classe di utilità che può inviare notifiche con impostazioni personalizzabili, in cui la maggior parte dei chiamanti utilizzerà valori predefiniti ragionevoli.
Organizzerai il codice in due file:
NotificationService.cs: crea una classeNotificationServicenello spazio dei nomiNotificationscon un metodo che dimostri l'uso dei parametri opzionali:SendNotification(string message, string priority = "Normal", bool addTimestamp = true)- Questo metodo dovrebbe restituire una stringa di notifica formattata. QuandoaddTimestampè true, anteponi[TIMESTAMP]al messaggio. Il formato dovrebbe essere:[Priority] Messageoppure[TIMESTAMP] [Priority] Message, a seconda dell'impostazione della data e ora.
Program.cs: nel file principale, mostra come funzionano i parametri opzionali chiamandoSendNotificationin tre modi diversi: usando tutti i valori predefiniti, sovrascrivendo un parametro e sovrascrivendo entrambi i parametri opzionali.
Riceverai tre input:
- Primo messaggio (userà tutti i valori predefiniti)
- Secondo messaggio (userà la priorità
"Urgent"con la data e ora predefinite) - Terzo messaggio (userà la priorità
"Low"e nessuna data e ora)
Chiama SendNotification tre volte e stampa ogni risultato:
- Prima chiamata: passa solo il primo messaggio (usa i valori predefiniti: priorità
"Normal", data e ora abilitate) - Seconda chiamata: passa il secondo messaggio con priorità
"Urgent"(la data e ora è ancora impostata su true per impostazione predefinita) - Terza chiamata: passa il terzo messaggio con priorità
"Low"efalseper la data e ora
Ad esempio, se gli input sono System started, Server overload e Cache cleared, l'output dovrebbe essere:
[TIMESTAMP] [Normal] System started
[TIMESTAMP] [Urgent] Server overload
[Low] Cache clearedNota come lo stesso metodo gestisce elegantemente tutti e tre gli scenari: i chiamanti specificano solo ciò che vogliono modificare rispetto ai valori predefiniti!
Provalo tu
using System;
using Notifications;
class Program
{
public static void Main(string[] args)
{
// Leggi i tre messaggi
string message1 = Console.ReadLine();
string message2 = Console.ReadLine();
string message3 = Console.ReadLine();
// Crea un'istanza di NotificationService
NotificationService service = new NotificationService();
// TODO: Chiama SendNotification tre volte e stampa ogni risultato:
// 1. Prima chiamata: passa solo message1 (usa tutti i valori predefiniti)
// 2. Seconda chiamata: passa message2 con priorità "Urgent" (timestamp ha true come valore predefinito)
// 3. Terza chiamata: passa message3 con priorità "Low" e false per timestamp
}
}
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