Szkoła C# – Metody rozszerzające

Artykuł jest aktualny

Dbam o aktualność moich najpopularniejszych artykułów, abyś otrzymał/a najwyższej jakości wiedzę.
~ 2020

Bardzo często przy tworzeniu oprogramowania korzysta się z bibliotek zewnętrznych. Zazwyczaj są one udostępnione jako biblioteki dynamiczne DLL (Dynamic-Link Library). Podczas pisania programu, może zdarzyć się sytuacja kiedy będziemy wymagali od takiej biblioteki więcej, aniżeli ona udostępnia. Zamiast przysyłać prośbę o dodanie nowej funkcjonalności do jej autora, sami możemy sobie pomóc, dzięki metodom rozszerzającym.

Czym są metody rozszerzające i w jaki sposób z nich korzystać?

Zanim przedstawię działanie tych metod, chciałbym przedstawić pewien przypadek. Załóżmy, że w naszym rozwijanym projekcie potrzebujemy sprawdzać, czy ciąg znaków, na którym właśnie operujemy, zawiera parzystą ilość znaków.  Najprostsza metoda sprawdzająca to mogłaby wyglądać następująco:

public bool IsEven(string str) 
{ 
   return str.Length % 2 == 0; 
}

W porządku, teraz, aby używać tej metody, musimy tworzyć obiekt (być może jakiejś klasy narzędziowej), aby z niej korzystać lub umieścić ją zwyczajnie w klasie statycznej. Ale czy nie byłoby wspaniale posiadać dostęp do niej podczas używania standardowej klasy string? Wywołanie takie wyglądałoby następująco: <ciąg znaków>.IsEven().  Jak to zrobić?

Wystarczy utworzyć statyczną klasę wraz ze statyczną metodą, która jako swój pierwszy parametr przyjmuje nazwę rozszerzanego typu wraz ze słówkiem kluczowym this:

public static class ExtendedString 
{ 
   public static bool IsEven(this string str)  
   { 
       return str.Length % 2 == 0; 
   } 
}

Dzięki temu możemy pozwolić sobie na następujące wywołania:

"Ibiza".IsEven(); 
ExtendedString.IsEven("Majorka");

Należy pamiętać, że nie jest to żaden magiczny mechanizm i możemy korzystać z danej metody rozszerzającej tylko wtedy gdy klasa zawierająca tę metodę jest w zasięgu dostępności. Zwróćmy uwagę na przypadek, kiedy utworzymy metodę rozszerzającą o takiej samej nazwie jak istniejąca już metoda w klasie rozszerzanej. W takiej sytuacji zawsze będzie wybierana metoda z klasy rozszerzanej, chyba że jednoznacznie wskażemy naszą metodę za pomocą składni statycznej:

NaszaRozszerzonaKlasa.Metoda().

Jak widzisz, metody rozszerzające są bardzo przydatnym mechanizmem w języku C#. Zdecydowanie warto z nich korzystać, aby znacznie ułatwić sobie pracę.

Newsletter

Zapisz się do mojego newslettera, aby nie przegapić nowych postów.

Dodatkowo wyślę Ci darmowego ebooka mojego autorstwa zawierającego mnóstwo wskazówek dla programisty aplikacji mobilnych.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Wypełnij to pole
Wypełnij to pole
Proszę wprowadzić prawidłowy adres email.
You need to agree with the terms to proceed

Menu