Jak używać nazwanych i opcjonalnych parametrów w C #

Firma Microsoft wprowadziła obsługę nazwanych i opcjonalnych parametrów w języku C # 4.0. Podczas gdy nazwany parametr jest używany do określenia argumentu na podstawie nazwy argumentu, a nie pozycji, można użyć parametru opcjonalnego, aby pominąć jeden lub więcej parametrów w sygnaturze metody. Parametry metody mogą być wymagane lub opcjonalne, w zależności od tego, czy konieczne jest przekazywanie wartości do tych parametrów, gdy metoda jest wywoływana.

Należy zauważyć, że nazwane i opcjonalne parametry mogą być używane nie tylko z metodami, ale także z indeksatorami i delegatami. W tym artykule omówiono te dwie zaawansowane funkcje języka programowania C # i sposób, w jaki możemy z nimi pracować.

Aby pracować z przykładami kodu przedstawionymi w tym artykule, w systemie powinien być zainstalowany program Visual Studio 2019. Jeśli nie masz jeszcze kopii, możesz pobrać program Visual Studio 2019 tutaj.

Utwórz projekt aplikacji konsoli w programie Visual Studio

Po pierwsze, utwórzmy projekt aplikacji konsoli .NET Core w programie Visual Studio. Zakładając, że w systemie jest zainstalowany program Visual Studio 2019, wykonaj czynności opisane poniżej, aby utworzyć nowy projekt aplikacji konsoli .NET Core w programie Visual Studio.

  1. Uruchom środowisko IDE programu Visual Studio.
  2. Kliknij „Utwórz nowy projekt”.
  3. W oknie „Utwórz nowy projekt” wybierz „Aplikacja konsoli (.NET Core)” z wyświetlonej listy szablonów.
  4. Kliknij Następny.
  5. W oknie „Konfiguruj nowy projekt” pokazanym obok podaj nazwę i lokalizację nowego projektu.
  6. Kliknij Utwórz.

Spowoduje to utworzenie nowego projektu aplikacji konsoli .NET Core w programie Visual Studio 2019. Będziemy używać tego projektu do pracy z nazwanymi i opcjonalnymi parametrami w kolejnych sekcjach tego artykułu.

Użyj nazwanych parametrów w C #

Kiedy wywołujesz metodę, konstruktor, indeksator lub delegata, musisz przekazać argumenty dla wymaganych parametrów, ale możesz pominąć argumenty dla parametrów, które zostały zdefiniowane jako parametry opcjonalne.

Często może być konieczne wywołanie metody, która ma wiele parametrów. A nawet gdy wywołujesz taką metodę z tylko wymaganymi parametrami, czasami niezwykle trudno jest zrozumieć, który argument jest mapowany do którego parametru. Oto, gdzie na ratunek przychodzą nazwane argumenty.

Nazwane argumenty w języku programowania C # służą do kojarzenia nazwy argumentu metody z jej wartością - tj. Wartością przekazaną jako argument podczas wywoływania metody. Należy zauważyć, że w przypadku używania nazwanego argumentu argumenty są oceniane w tej samej kolejności, w jakiej zostały przekazane.

Spójrzmy na przykład. Napisz następującą metodę o nazwie Add w klasie Program nowego projektu aplikacji konsoli.

public static int Add (int x, int y, int z, int a, int b, int c)

{

   return x + y + z + a + b + c;

}

Załóżmy, że wywołujesz metodę Add, jak pokazano w poniższym fragmencie kodu.

static void Main (string [] args)

{

    Dodaj (5, 10);

}

Powyższy kod nie zadziała, ponieważ w podpisie metody Add jest sześć wymaganych parametrów (żadne nie są parametrami opcjonalnymi), ale przekazałeś tylko dwa argumenty. Zostanie wyświetlony następujący błąd.

W związku z tym jesteś ograniczony do przekazywania wartości do każdego z parametrów, aby spełnić wywołanie, jak pokazano we fragmencie kodu podanym poniżej.

static void Main (string [] args)

{

   Dodaj (5, 10, 8, 2, 3, 6);

}

Sytuacja komplikuje się, gdy w parametrach metody występuje mieszanka typów danych. Aby to zilustrować, zmodyfikujmy naszą metodę Add, jak pokazano w poniższym fragmencie kodu.

public static int Add (int x, int y, int z, double a, double b, double c)

{

    return x + y + z + Convert.ToInt32 (a) + Convert.ToInt32 (b) + Convert.ToInt32 (c);

}

Zapamiętywanie typów danych parametrów, a także ich pozycji jest uciążliwe. Rozwiązaniem tego problemu jest wykorzystanie nazwanych argumentów i przekazanie wartości do metody, jak pokazano we fragmencie kodu podanym poniżej.

static void Main (string [] args)

{

    Dodaj (x: 5, y: 10, z: 8, a: 2,0, b: 3,0, c: 6,0);

}

Możesz nawet zmienić kolejność nazwanych argumentów, jak pokazano we fragmencie kodu podanym poniżej.

static void Main (string [] args)

{

    Dodaj (z: 8, x: 5, y: 10, c: 6, a: 2,0, b: 3,0);

}

Tak długo, jak nadasz argumentom nazwę, możesz przekazać je w dowolnej kolejności, a kompilator nie zgłosi żadnego błędu - tj. Jest to całkowicie poprawne w C #.

Użyj parametrów opcjonalnych w C #

Parametry opcjonalne w języku programowania C # umożliwiają określenie argumentów w podpisie metody, które obiekt wywołujący metody może swobodnie pominąć. Innymi słowy, chociaż musisz określić wartości dla wymaganych parametrów, możesz nie określać wartości parametrów opcjonalnych. W niektórych przypadkach opcjonalny parametr może mieć również skojarzoną wartość domyślną.

Wartość domyślna parametru opcjonalnego może mieć dowolny z trzech rodzajów wartości: wyrażenie stałe, wyrażenie w postaci typu wartości lub wyrażenie w postaci wartości domyślnej (v), gdzie v jest wartością rodzaj.

Metoda Add pokazana w poniższym fragmencie kodu ilustruje, jak można określić opcjonalne argumenty do metody w C #.

public static int Add (int x, int y = 0, int z = 0)

{

    return x + y + z;

}

A oto jak możesz wywołać metodę Add.

Dodaj (10);

Ponieważ dwa parametry w metodzie Add są opcjonalne, podczas wywoływania metody można przekazać jedną wartość całkowitą. Uważaj, aby zachować właściwą kolejność definiowania parametrów w metodzie. Wymagane parametry powinny znajdować się na pierwszym miejscu, a po nich parametry opcjonalne, jeśli istnieją.

Nazwane i opcjonalne parametry zostały wprowadzone do języka programowania C # w celu poprawy współdziałania z interfejsami API COM. Używanie nazwanych parametrów może poprawić czytelność kodu źródłowego. Można też skorzystać z parametrów opcjonalnych jako zamiennika dla przeciążonych metod, gdy definicja metody jest identyczna.

Jak zrobić więcej w C #:

  • Jak używać płynnych interfejsów i łańcuchów metod w języku C #
  • Jak testować jednostkowe metody statyczne w C #
  • Jak refaktoryzować obiekty Boga w C #
  • Jak używać funkcji ValueTask w C #
  • Jak używać niezmienności w C
  • Jak używać const, readonly i static w C #
  • Jak używać adnotacji danych w C #
  • Jak pracować z identyfikatorami GUID w C # 8
  • Kiedy używać klasy abstrakcyjnej, a kiedy interfejsu w języku C #
  • Jak pracować z AutoMapper w C #
  • Jak używać wyrażeń lambda w C #
  • Jak pracować z delegatami Action, Func i Predicate w C #
  • Jak pracować z delegatami w C #
  • Jak zaimplementować prosty rejestrator w C #
  • Jak pracować z atrybutami w C #
  • Jak pracować z log4net w C #
  • Jak zaimplementować wzorzec projektu repozytorium w C #
  • Jak pracować z odbiciem w C #
  • Jak pracować z Filesystemwatcher w C #
  • Jak wykonać leniwą inicjalizację w C #
  • Jak pracować z MSMQ w C #
  • Jak pracować z metodami rozszerzającymi w C #
  • Jak nam wyrażenia lambda w C #
  • Kiedy używać słowa kluczowego volatile w języku C #
  • Jak używać słowa kluczowego yield w języku C #
  • Jak zaimplementować polimorfizm w C #
  • Jak zbudować własny harmonogram zadań w C #
  • Jak pracować z RabbitMQ w C #
  • Jak pracować z krotką w C #
  • Eksplorowanie metod wirtualnych i abstrakcyjnych w C #
  • Jak korzystać z Dapper ORM w C #
  • Jak używać wzorca projektowego flyweight w C #