Extension methods w C#

04.06.2009 @ 20:20:42 by Rafał Kozik | C# .NET

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.


Komentowanie zostało tymczasowo wyłączone.