Argumenty nazwane
Część sekcji Programowanie obiektowe ścieżki C# w Coddy. Lekcja 49 z 70.
Argumenty nazwane pozwalają określić, który parametr otrzymuje wartość, przez użycie jego nazwy zamiast polegania na kolejności. Dzięki temu wywołania metod są czytelniejsze i możesz przekazywać argumenty w dowolnej kolejności.
Użyj nazwy parametru, a przed wartością umieść dwukropek:
public static void CreateUser(string name, int age, bool isActive)
{
Console.WriteLine($"{name}, Age: {age}, Active: {isActive}");
}
// Używanie argumentów nazwanych
CreateUser(name: "Alice", age: 25, isActive: true);
CreateUser(age: 30, isActive: false, name: "Bob"); // Dowolna kolejność jest poprawnaArgumenty nazwane są szczególnie przydatne w połączeniu z parametrami opcjonalnymi. Zamiast podawać wszystkie poprzedzające wartości opcjonalne, możesz od razu przejść do tej, której potrzebujesz:
public static void Configure(string host, int port = 8080, bool useSSL = false, int timeout = 30)
{
Console.WriteLine($"{host}:{port}, SSL: {useSSL}, Timeout: {timeout}");
}
// Pomiń port i useSSL, podaj tylko timeout
Configure("localhost", timeout: 60);
Configure("server.com", useSSL: true);Możesz mieszać argumenty pozycyjne i nazwane, ale argumenty pozycyjne muszą być podane jako pierwsze. Argumenty nazwane poprawiają czytelność, szczególnie w przypadku metod z wieloma parametrami tego samego typu lub flagami logicznymi, których znaczenie nie wynika jednoznacznie z samej wartości.
Wyzwanie
ŁatwyZbudujmy generator raportów, który wykorzystuje argumenty nazwane, aby wywołania metod były krystalicznie jasne. Gdy metody mają wiele parametrów — zwłaszcza tego samego typu lub będących flagami logicznymi — argumenty nazwane sprawiają, że kod sam się dokumentuje.
Rozmieścisz kod w dwóch plikach:
ReportGenerator.cs: Utwórz klasęReportGeneratorw przestrzeni nazwReportsz metodą mającą kilka opcjonalnych parametrów:GenerateReport(string title, string author = "Anonymous", bool includeHeader = true, bool includeSummary = false, int maxPages = 10)- Ta metoda powinna zwracać sformatowany ciąg znaków opisujący konfigurację raportu
- Format:
Report: {title} by {author} | Header: {Yes/No}, Summary: {Yes/No}, Max Pages: {maxPages}
Program.cs: W głównym pliku pokaż możliwości argumentów nazwanych, wywołującGenerateReportna różne sposoby — pomijaj niepotrzebne parametry opcjonalne i określaj tylko te, które są istotne dla danego raportu.
Otrzymasz trzy dane wejściowe:
- Tytuł pierwszego raportu
- Tytuł drugiego raportu
- Tytuł trzeciego raportu
Wygeneruj trzy raporty o różnych konfiguracjach:
- Pierwszy raport: Użyj tylko tytułu (zastosuj wszystkie wartości domyślne)
- Drugi raport: Użyj tytułu z
includeSummary: trueimaxPages: 25(pomiń autora i includeHeader, pozostawiając ich wartości domyślne) - Trzeci raport: Użyj tytułu z
author: "Admin",includeHeader: falseiincludeSummary: true(pozostaw domyślną wartość maxPages)
Wypisz wynik każdego raportu w osobnym wierszu.
Na przykład, jeśli danymi wejściowymi są Sales Q1, Annual Review i Inventory Check, wynik powinien wyglądać tak:
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: 10Zwróć uwagę, że argumenty nazwane pozwalają od razu przejść do parametrów, które Cię interesują — nie musisz określać author ani includeHeader, żeby zmienić includeSummary. Dzięki temu wywołania metod są znacznie czytelniejsze i lepiej oddają intencje!
Spróbuj swoich sił
using System;
using Reports;
class Program
{
public static void Main(string[] args)
{
// Wczytaj tytuły trzech raportów
string title1 = Console.ReadLine();
string title2 = Console.ReadLine();
string title3 = Console.ReadLine();
// Utwórz instancję ReportGenerator
ReportGenerator generator = new ReportGenerator();
// TODO: Wygeneruj pierwszy raport – użyj tylko tytułu (zastosuj wszystkie wartości domyślne)
// TODO: Wygeneruj drugi raport – użyj tytułu oraz includeSummary: true i maxPages: 25
// (pomiń author i includeHeader, zachowując ich wartości domyślne)
// TODO: Wygeneruj trzeci raport – użyj tytułu oraz author: "Admin", includeHeader: false i includeSummary: true
// (zachowaj domyślną wartość maxPages)
// Wypisz wynik każdego raportu
}
}
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Programowanie obiektowe
1Podstawy programowania obiektowego
Pliki zewnętrznePrzestrzenie nazw i dyrektywyWprowadzenie do klas i obiektówSłowo kluczowe „this”Metody i parametryPola a właściwościKonstruktoryInicjalizatory obiektówPodsumowanie — prosty kalkulator4Dziedziczenie
Podstawowa składnia dziedziczenia (:)Słowo kluczowe 'base'Słowa kluczowe virtual i overrideKlasy sealedBazowa klasa 'object'Powtórzenie – hierarchia pracowników7Zaawansowane funkcje
Przeciążanie operatorówIndeksery (this[])Nadpisywanie ToString()Metody rozszerzającePodsumowanie – własna lista2Właściwości i składowe statyczne
Właściwości automatyczneWłaściwości tylko do odczytu i zapisuPola i metody statyczneKlasy statyczneSkładowe z ciałem wyrażeniowym5Polimorfizm i interfejsy
Polimorfizm czasu kompilacji a czasu wykonaniaInterfejs a klasa abstrakcyjnaWiele interfejsówJawne implementowanie interfejsówRzutowanie w górę i w dółPowtórka — kalkulator kształtów8Zaawansowane koncepcje OOP
Kompozycja zamiast dziedziczeniaTypy generyczne (klasy i metody)Delegaty i zdarzeniaAtrybuty i refleksjaIDisposable i instrukcja usingPodstawy wstrzykiwania zależności11Wzorce projektowe, część 2
Wzorzec poleceniaWzorzec adapteraWzorzec dekoratoraWzorzec metody szablonowejWzorzec stanuWzorzec kompozytu3Architektura klas
Dane instancji a dane statyczneSłowa kluczowe 'readonly' i 'const'Pola zapasowePowtórzenie — menedżer kont bankowych6Hermetyzacja
Modyfikatory dostępuWłaściwości w hermetyzacjiImplementacja ukrywania danychWzorce niezmiennościPowtórka — dane studentów9Argumenty zmiennej liczby
Słowo kluczowe „params”Parametry opcjonalneArgumenty nazwanePrzeciążanie metodPoćwicz samodzielnie: Kompilator C# online