Extension methods w C#W prawie każdym projekcie można znaleźć statyczną klasę/klasy pomocnicze, które zawierają operacje na jakiś danych, ale nie są obiektem w klasycznym sensie. Przykład takiej klasy:
static class Helper
{
public static string SHA1(string text)
{
byte[] buffer = Encoding.UTF8.GetBytes(text);
SHA1CryptoServiceProvider sha1 = new SHA1CryptoServiceProvider();
string hash = BitConverter.ToString(sha1.ComputeHash(buffer));
return hash.Replace("-", "");
}
}
Używamy tego tak:
string sha1 = Helper.SHA1(password);
Jak zrobić, żeby pisać mniej kodu i było wygodniej i czytelniej? W C# 3.0 zostały wprowadzone Extension methods, które nam w tym pomogą.
Zmiana w kodzie w gruncie rzeczy jest kosmetyczna, wystarczy dodać this przed typem parametru:
static class Helper
{
public static string SHA1(this string text)
{
// (...)
}
}
Teraz możemy zrobić po prostu tak:
string sha1 = password.SHA1();
Prawda, że czytelniej? Na dodatek Intellisense pokazuje naszą metodę na liście podpowiedzi.