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ć.
8 comments
Szkoda że dopiero teraz stwierdzili że to jednak dobry pomysł ;]. Chociaż w Javie do dzisiaj nie chcą tego wprowadzić.
@wojtek – lepiej późno niż wcale 🙂
Świetna sprawa dzięki za art.
Kiedyś przeczesywałem sieć z googlem szukająć sposobu jawnego przypisywania domyślnego parametru … nie udało się 😀 Tutaj wszystko ładnie podane na tacy. Dzięki za post.
Dzięki wielkie! Już się (niestety) przyzwyczaiłem, że domyślnych nie ma, że nawet tego już nie szukałem, a to bardzo upraszczający życie “bajer”!
Dzięki wielkie!
Zapomniałeś napisać o tym jakie zagrożenia to powoduje.
Comments are closed.