Słowo kluczowe „params”
Część sekcji Programowanie obiektowe ścieżki C# w Coddy. Lekcja 47 z 70.
Słowo kluczowe params pozwala metodzie przyjmować zmienną liczbę argumentów tego samego typu. Zamiast wymagać od wywołujących ręcznego utworzenia tablicy, mogą oni przekazywać argumenty bezpośrednio, oddzielając je przecinkami.
Umieść params przed parametrem tablicowym w sygnaturze metody:
public static int Sum(params int[] numbers)
{
int total = 0;
foreach (int n in numbers)
total += n;
return total;
}
// Wszystkie te wywołania działają
Console.WriteLine(Sum(1, 2)); // 3
Console.WriteLine(Sum(1, 2, 3, 4, 5)); // 15
Console.WriteLine(Sum()); // 0 (pusta tablica)Kompilator automatycznie umieszcza argumenty w tablicy. Możesz też bezpośrednio przekazać istniejącą tablicę, jeśli już ją masz:
int[] values = { 10, 20, 30 };
Console.WriteLine(Sum(values)); // 60Warto pamiętać o kilku zasadach: metoda może mieć tylko jeden parametr params i musi on być ostatnim parametrem na liście. Możesz łączyć go ze zwykłymi parametrami:
public static void Log(string prefix, params object[] items)
{
foreach (var item in items)
Console.WriteLine(prefix + item);
}
Log("Item: ", "Apple", 42, true);Słowo kluczowe params sprawia, że interfejsy API są bardziej elastyczne i przyjazne dla wywołujących, dlatego można je znaleźć w metodach takich jak Console.WriteLine i string.Format.
Wyzwanie
ŁatwyZbudujmy elastyczny formater wiadomości, który używa słowa kluczowego params, aby obsługiwać dowolną liczbę wartości. Utworzysz klasę narzędziową, która może formatować wiadomości z argumentami o zmiennej liczbie, demonstrując, jak params zwiększa wszechstronność metod i ułatwia ich wywoływanie.
Rozmieścisz swój kod w dwóch plikach:
MessageFormatter.cs: Utwórz klasęMessageFormatterw przestrzeni nazwFormattingz dwiema metodami używającymiparams:Combine(params string[] parts)— łączy wszystkie podane ciągi znaków, wstawiając między nimi spację, i zwraca wynikFormatList(string label, params int[] numbers)— łączy zwykły parametr z tablicąparams. Powinna zwracać etykietę, po której następuje dwukropek, a następnie wszystkie liczby oddzielone przecinkami (np.Scores: 85, 90, 78)
Program.cs: W głównym pliku zademonstruj działanie obu metod na danych wejściowych. Wczytaj ciąg znaków z etykietą, a następnie wczytaj wiersz liczb całkowitych oddzielonych przecinkami. UżyjCombine, aby połączyć trzy ustalone słowa, a następnie użyjFormatList, aby wyświetlić etykietę wraz z liczbami.
Otrzymasz dwa dane wejściowe:
- Ciąg znaków z etykietą (np.
Scores) - Lista liczb całkowitych oddzielonych przecinkami (np.
85,90,78,92)
Najpierw wywołaj Combine ze słowami "Hello", "params" i "world!", a następnie wypisz wynik. Potem przekształć liczby całkowite oddzielone przecinkami w tablicę i wywołaj FormatList, przekazując etykietę i tablicę liczb całkowitych. Wypisz również ten wynik.
Na przykład, jeśli danymi wejściowymi są Scores i 85,90,78, wynikiem powinno być:
Hello params world!
Scores: 85, 90, 78Zwróć uwagę, że Combine przyjmuje bezpośrednio dowolną liczbę ciągów znaków, a FormatList pokazuje, że możesz łączyć zwykłe parametry z params — parametr params musi po prostu znajdować się na końcu. Możesz też przekazać istniejącą tablicę do metody z parametrem params, co właśnie zrobisz z przekształconymi liczbami całkowitymi!
Spróbuj swoich sił
using System;
using Formatting;
class Program
{
public static void Main(string[] args)
{
// Wczytaj dane wejściowe
string label = Console.ReadLine();
string numbersInput = Console.ReadLine();
// TODO: Użyj MessageFormatter.Combine z "Hello", "params" i "world!"
// i wypisz wynik
// TODO: Przekształć liczby całkowite oddzielone przecinkami w tablicę int
// Wskazówka: Podziel ciąg znaków i przekonwertuj każdą część na int
// TODO: Użyj MessageFormatter.FormatList z label i tablicą int
// i wypisz wynik
}
}
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