Extension Methods w C#

Jedną z ogromnych zalet programowania obiektowego jest to, że raz napisany kod możemy łatwo rozszerzyć o dowolne konstrukcje, lub stworzyć zupełnie coś nowego na jego podstawie. W tym przypadku chodzi mi głównie o kwestię dziedziczenia, która ma swoje wady i zalety.

Metody rozszerzające to bardzo ciekawa konstrukcja, która umożliwia szybkie dodanie funkcjonalności do już istniejących klas, tworząc tym samym ciekawą alternatywę dla dziedziczenia. Funkcjonalność ta została w 3 wersji frameworka .Net (3.0) i bardzo często jest ona wykorzystywana do tworzenia nowych metod dla klasy string.

Metody rozszerzeń muszą być statyczne i muszą korzystać ze słowa kluczowego this w definicji parametru. To właśnie dzięki takiemu parametrowi kompilator wie, że ma do czynienia z metodą rozszerzającą istniejąca klasę.

Przykłady wykorzystania

Zaczniemy od utworzenia naszej klasy, w której będziemy przechowywać metody. Musimy zapamiętać, że koniecznie musi ona być statyczna i zawierać tylko statyczne metody!

public static class StaticExtensions

{

public static string FirstLetterBig(this string input)

{

if (!string.IsNullOrEmpty(input))

{

char[] array = input.ToCharArray();

array[0] = char.ToUpper(array[0]);

return new string(array);

}

 

return input;

}

 

public static void WriteToConsole(this string text)

{

Console.WriteLine(text);

}

}
W przypadku tego kodu, warto zwrócić oczywiście na słowo kluczowe static umieszczone w deklaracji klasy oraz metod, a także na wspominane wcześniej słowo kluczowe this, które dopiro określa to jaki typ rozszerza określona metoda.

Parametr wykorzystujący to słowo kluczowe jest bezwzględnie wymagany, inaczej po prostu uzyskamy zwykłą metodę.

Sposób wywołania jest raczej prosty i jeżeli kiedykolwiek korzystaliśmy (nawet nieświadomie) z metod rozszerzających lub LINQ, nie przysporzy nam to raczej kłopotów.

static void Main(string[] args)

{

string tekst = "fajny napis";

tekst.WriteToConsole();

string duzy = tekst.FirstLetterBig();

duzy.WriteToConsole();

Console.ReadKey();

}

 

Po wykonaniu tego kodu na naszym ekranie powinny ukazać się dwa napisy, w tym jeden z wielką pierwszą literą.

* number;

}

Taką metodę oferuje nam oczywiście klasa Math, ale dla naszych eksperymentów możemy stworzyć i przetestować ją sobie sami.

Po wykonaniu tych linijek:

int cyfra = 25;

Console.WriteLine(cyfra.Square());

Na ekranie powinniśmy zobaczyć efekt działania naszej metody.