Szkoła C# – 2 – Metody rozszerzające

 

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;
    }
}

 

Dzieki 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(<parametry>).

Metody rozszerzające są bardzo przydatnym mechanizmem w języku C#. Warto z nich korzystać aby znacznie ułatwić sobie pracę.

Mam coś dla Ciebie

Zapisz się do mojego newslettera, a ja prześlę Ci zbiór kilkunastu praktycznych wskazówek dla programisty aplikacji mobilnych.

Menu