Łukasz Gąsior
  • Home
  • now!
  • Blog
  • Po polsku
Social Links
Twitter
LinkedIn
Facebook
YouTube
Reddit
Instagram
GitHub
Medium
RSS
Łukasz Gąsior
  • Home
  • now!
  • Blog
  • Po polsku
  • Po polsku

C# 4.0 – parametr domyślny

  • 2011-02-20
  • 8 komentarzy
  • 2 minute read
  • 916 views

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ć.

Share
Tweet
Share
Share
Related Topics
  • C#
  • paramter domyślny. funkcja
You May Also Like
View Post
  • Po polsku

Software Craftsmanship Wrocław

  • 2017-06-06
View Post
  • Po polsku

Pilnuj typów danych

  • 2014-02-26
View Post
  • Po polsku

ReSharper Essentials – poszło!

  • 2014-02-21
View Post
  • Po polsku

Turbo-Mode Developera

  • 2014-02-19
View Post
  • Po polsku

Badanie usability by TechSmith

  • 2014-02-13
View Post
  • Po polsku

Global Windows Azure Bootcamp 2014

  • 2014-02-05
View Post
  • Po polsku

Quick tip: 12. Stosuj AsNoTracking() gdzie się da!

  • 2013-01-27
View Post
  • Po polsku

Quick tip: 11. Indexed views vs. SQL Server Express

  • 2012-07-23
8 comments
  1. Pingback: dotnetomaniak.pl
  2. Pingback: C# 4.0 - parametr domyślny - develway.pl
  3. wojtek(szogun1987) pisze:
    2011-02-21 o 08:23

    Szkoda że dopiero teraz stwierdzili że to jednak dobry pomysł ;]. Chociaż w Javie do dzisiaj nie chcą tego wprowadzić.

  4. Łukasz Gąsior pisze:
    2011-02-21 o 08:33

    @wojtek – lepiej późno niż wcale 🙂

  5. Kamil pisze:
    2011-02-21 o 09:22

    Świetna sprawa dzięki za art.

  6. Michał Franc pisze:
    2011-02-22 o 15:59

    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.

  7. yvisek pisze:
    2011-03-23 o 12:43

    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!

  8. 3P pisze:
    2011-04-12 o 20:31

    Zapomniałeś napisać o tym jakie zagrożenia to powoduje.

Comments are closed.

click & help!
Nakarm dziecko!
Follow me
RESHARPER ESSENTIALS
ReSharper Essentials
CODINGTV();
codingtv();
Twitter Feed
avatar
Lukasz Gasior
@lukaszgasior
146 Following
592 Followers
u @miroburn to jakieś większe zmiany na tej Maderze zaszły ... i nic się nie chwali na vlogach ... choć kursy na ak… https://t.co/WobZbxzG3d
113 days ago
  • Reply
  • Retweet
  • Favorite
RT @lukeintheclouds: Follow me if you are interested in: ➤ Cloud computing (mainly #azure and #gcp) ➤ DevOps ➤ Cybersecurity
229 days ago
  • Reply
  • 3 Retweet
  • Favorite
Follow
Categories
  • Azure Cloud (6)
  • Po polsku (104)
  • Windows (1)
Featured Posts
  • Azure Activity Log – Change History
    • 2020-09-29
  • Diagram Driven Cloud Infrastructure with Cloud Maker
    • 2020-09-22
  • Azure ARM template, but it is not JSON!
    • 2020-09-15
About
👍 Cloud | DevOps | Development | Technical Leadership | 📗Author of "ReSharper Essentials
© 2019 Łukasz Gąsior. All rights reserved.
hosted with ♥️ on webio | Polityka prywatności

Input your search keywords and press Enter.