W mojej pierwszej „zawodowej” pracy na stanowisku programisty miałem okazję programować w VB.NET. Wbrew wielu opiniom uważam, że to bardzo przyjazny język i programuje się w nim bardzo fajnie.

Po przesiadce na C#, poza koniecznością wstawiania średnika na końcu każdej linii, zaskoczył mnie brak możliwości zdefiniowania parametru domyślnego w metodzie. Trochę to zajęło, ale i C# w końcu „dorobił” się tej funkcjonalności. Parametry domyślne w C# zostały wprowadzone w wersji C# 4.0, czyli w .NET 4.0.

Parametry domyślne przydają się bardzo często w sytuacji, kiedy musimy przeciążyć jakąś metodę. Np. zamiast pisać:

class MyClass
{
   public MyObject MyMethod()
   {
      return MyMethod(1, "value");
   }

   public MyObject MyMethod(int value1)
   {
      return MyMethod(value1, "value");
   }

   public MyObject MyMethod(int value1, string value2)
   {
      return repository.GetMyObject(value1, value2);
   }
}

możemy zdefiniować jedną metodę i w definicji jej parametrów podać wartości domyślne:

public MyObject MyMethod(int value1 = 1, string value2 = "value")
{
   return repository.GetMyObject(value1, value2);
}

Po takiej deklaracji poniższe wywołania są jak najbardziej prawidłowe:

myClass.MyMethod();
myClass.MyMethod(2);
myClass.MyMethod(2, "new value");

Wprowadzenie wartości domyślnych w metodzie MyMethod znacznie uprościło kod klasy MyClass, nie zmieniając jednocześnie sposobu wywołania tej metody.

A teraz załóżmy, że chcemy wywołać MyMethod jedynie z parametrem value2. Standardowo znowu byśmy przeciążyli metodę MyMethod. A z parametrem domyślnym? Takie wywołanie nie zadziała, ponieważ pierwszym parametrem metody jest int:

myClass.MyMethod("new value");

Jeżeli jednak podamy dokładnie, do którego parametru przypisujemy wartość, to obejdziemy się bez przeciążania:

myClass.MyMethod(value2: "new value");

W ten sam sposób możemy zmienić kolejność przekazywania parametrów:

myClass.MyMethod(value2: "new value", value1: 2);

Mechanizm definiowania wartości domyślnych znacznie upraszcza nasz kod, warto więc z niego korzystać.