Metody rozszerzające - Extensions methods w języku C#

Metody rozszerzające - rozszerzenie funkcjonalności istniejących typów.


Metody rozszerzające zostały wprowadzone w C# 3.0 i pozwalają rozszerzyć funkcjonalność typów już istniejących. Metoda rozszerzająca może być zadeklarowana tylko w klasie statycznej i musi przed pierwszym parametrem (czyli typem który rozszerzamy) zawierać słowo kluczowe this, które mówi że jest to metoda rozszerzająca. Dzięki metodom rozszerzającym, bez użycia jawnego dziedziczenia, możemy rozszerzać klasy - wcześniej było to niemożliwe.

Przykładowy kod korzystający z metody rozszerzającej:

// rozszerzenie klasy string
public static class StringExtension
{
    // zwraca liczbę szukanych znaków w ciągu
    public static int ZwrocLiczbeLiter(this String str, char znak)
    { return Array.FindAll<char>(str.ToCharArray(), delegate(char c)
            { 
                return c.Equals(znak);
            }
        ).Length; 
    }
}
 
class Program
{
    static void Main(string[] args)
    {
        string napis ="hahaha";
           
        int liczbaLiter = napis.ZwrocLiczbeLiter('a');
        Console.WriteLine("Liczba szukanych liter to: {0}", liczbaLiter);
 
        Console.ReadLine();
    }
}
W powyższym przykładzie zwracania jest liczba znaków "a" w ciągu znaków typu string. Wykorzystana została metoda anonimowa, czyli delegata bez nazwy aby zwrócić występowanie znaku, metoda FindAll<T> aby znaleźć wszystkie znaki oraz właściwość .Lenght, aby zwrócić liczbę znaków.

Ta sama metoda z użyciem wyrażenia lambda wygląda następująco:

// rozszerzenie klasy string
public static class StringExtension
{
    // zwraca liczbę szukanych znaków w ciągu
    public static int ZwrocLiczbeLiter(this String str, char znak)
    { 
	return Array.FindAll<char>(str.ToCharArray(), c => c.Equals(znak)).Length; 
    }
}

Więcej informacji na temat metod rozszerzających:

http://msdn.microsoft.com/pl-pl/library/bb383977.aspx
Komentarze facebook (polub nasz profil na FB aby je zobaczyć):