Sobes.tech
Junior

Na czym polega istota metod rozszerzeń?

sobes.tech AI

Odpowiedź od AI

Metody rozszerzeń (extension methods) pozwalają na dodanie nowych metod do istniejących typów bez zmiany ich kodu źródłowego ani tworzenia nowego typu pochodnego.

Istota jest następująca:

  • Są deklarowane jako metody statyczne w statycznej klasie.
  • Pierwszy parametr metody rozszerzenia ma słowo kluczowe this przed swoim typem. Ten parametr wskazuje na typ, który jest rozszerzany.
  • Są wywoływane tak, jakby były metodami instancji typu rozszerzanego.

Przykład:

// Statyczna klasa dla metod rozszerzeń
public static class StringExtensions
{
    // Metoda rozszerzenia dla typu string
    public static string Truncate(this string input, int maxLength)
    {
        if (string.IsNullOrEmpty(input))
        {
            return input;
        }
        return input.Length <= maxLength ? input : input.Substring(0, maxLength) + "...";
    }
}

// Użycie metody rozszerzenia
string myString = "This is a long string.";
string truncatedString = myString.Truncate(10); // Wywoływane jak metoda instancji

// Równoważne z wywołaniem bezpośrednim metody statycznej
string truncatedStringDirect = StringExtensions.Truncate(myString, 10);

Zalety:

  • Poprawiają czytelność kodu, pozwalając na użycie składni "kropki" na obiektach.
  • Umożliwiają dodanie funkcjonalności do zamkniętych (sealed) klas lub typów z bibliotek zewnętrznych bez zmiany ich kodu źródłowego.
  • Ułatwiają pisanie zapytań LINQ, ponieważ wiele metod LINQ jest zaimplementowanych jako metody rozszerzeń.