Argomenti con nome
Fa parte della sezione Programmazione orientata agli oggetti del percorso C# di Coddy. Lezione 49 di 70.
Gli argomenti con nome ti consentono di specificare quale parametro riceve un valore usando il suo nome, invece di affidarti alla posizione. Questo rende più chiare le chiamate ai metodi e ti permette di passare gli argomenti in qualsiasi ordine.
Usa il nome del parametro seguito da due punti prima del valore:
public static void CreateUser(string name, int age, bool isActive)
{
Console.WriteLine($"{name}, Age: {age}, Active: {isActive}");
}
// Utilizzo di argomenti con nome
CreateUser(name: "Alice", age: 25, isActive: true);
CreateUser(age: 30, isActive: false, name: "Bob"); // Qualsiasi ordine va beneGli argomenti con nome sono particolarmente utili se combinati con parametri opzionali. Invece di fornire tutti i valori opzionali precedenti, puoi passare direttamente a quello che ti serve:
public static void Configure(string host, int port = 8080, bool useSSL = false, int timeout = 30)
{
Console.WriteLine($"{host}:{port}, SSL: {useSSL}, Timeout: {timeout}");
}
// Ometti port e useSSL, specifica solo timeout
Configure("localhost", timeout: 60);
Configure("server.com", useSSL: true);Puoi mescolare argomenti posizionali e con nome, ma gli argomenti posizionali devono venire prima. Gli argomenti con nome migliorano la leggibilità, soprattutto per i metodi con più parametri dello stesso tipo o con flag booleani il cui significato non è ovvio dal solo valore.
Sfida
FacileCostruiamo un generatore di report che sfrutta gli argomenti denominati per rendere le chiamate ai metodi chiarissime. Quando i metodi hanno più parametri, soprattutto dello stesso tipo o flag booleani, gli argomenti denominati rendono il codice autoesplicativo.
Organizzerai il codice in due file:
ReportGenerator.cs: crea una classeReportGeneratornello spazio dei nomiReports, con un metodo che ha diversi parametri facoltativi:GenerateReport(string title, string author = "Anonymous", bool includeHeader = true, bool includeSummary = false, int maxPages = 10)- Questo metodo dovrebbe restituire una stringa formattata che descrive la configurazione del report
- Formato:
Report: {title} by {author} | Header: {Yes/No}, Summary: {Yes/No}, Max Pages: {maxPages}
Program.cs: nel file principale, dimostra la potenza degli argomenti denominati chiamandoGenerateReportin modi diversi: ometti i parametri facoltativi che non ti servono e specifica solo quelli importanti per ciascun report.
Riceverai tre input:
- Titolo del primo report
- Titolo del secondo report
- Titolo del terzo report
Genera tre report con configurazioni diverse:
- Primo report: usa solo il titolo (si applicano tutti i valori predefiniti)
- Secondo report: usa il titolo con
includeSummary: trueemaxPages: 25(ometti author e includeHeader, mantenendo i relativi valori predefiniti) - Terzo report: usa il titolo con
author: "Admin",includeHeader: falseeincludeSummary: true(mantieni il valore predefinito di maxPages)
Stampa il risultato di ciascun report su una riga separata.
Per esempio, se gli input sono Sales Q1, Annual Review e Inventory Check, l'output dovrebbe essere:
Report: Sales Q1 by Anonymous | Header: Yes, Summary: No, Max Pages: 10
Report: Annual Review by Anonymous | Header: Yes, Summary: Yes, Max Pages: 25
Report: Inventory Check by Admin | Header: No, Summary: Yes, Max Pages: 10Nota come gli argomenti denominati ti consentano di passare direttamente ai parametri che ti interessano: non devi specificare author o includeHeader solo per modificare includeSummary. In questo modo le chiamate ai metodi risultano molto più leggibili e rivelano chiaramente le intenzioni!
Provalo tu
using System;
using Reports;
class Program
{
public static void Main(string[] args)
{
// Leggi i titoli dei tre report
string title1 = Console.ReadLine();
string title2 = Console.ReadLine();
string title3 = Console.ReadLine();
// Crea un'istanza di ReportGenerator
ReportGenerator generator = new ReportGenerator();
// TODO: Genera il primo report - usa solo il titolo (si applicano tutti i valori predefiniti)
// TODO: Genera il secondo report - usa il titolo con includeSummary: true e maxPages: 25
// (ometti author e includeHeader, mantenendo i loro valori predefiniti)
// TODO: Genera il terzo report - usa il titolo con author: "Admin", includeHeader: false e includeSummary: true
// (mantieni il valore predefinito di maxPages)
// Stampa il risultato di ogni report
}
}
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