W C# 3.0 pojawiła się możliwość rozszerzania klas własnymi metodami (extensions methods). Poza tym, że na tym mechanizmie opiera się LINQ, można wykorzystać go dla własnej wygody:
static class StringExtension
{
public static int LetterCount(this string s, char c)
{
int r = 0;
for (int i = 0; i < s.Length; i++)
{
if (s[i] == c) r++;
}
return r;
}
}
static class Program
{
public static void Main()
{
Console.WriteLine(
"Suprisingly evil cat".LetterCount('a').ToString());
}
}
Na tym, można by w zasadzie zakończyć opis tego mechanizmu, ale... No właśnie. Jak zauważył mój kolega z wydziału, klasy StringExtension nigdzie (poprzez swoją nazwę) nie używamy (choć oczywiście możemy). Brak możliwości anonimowego rozszerzenia wyżej wspomniany kolega skwitował tak:
/*
* Statyczna klasa potrzebna do rozszerzenia clasy Delegate o dodatkowe metody
*/
static class bardzoSmisznaKlasaKtoraJestChybaBugiemProjektowymCsharpaasdfasdfasdfFSasdfasdfasfasfafasfafsDFASDFASDFASFGASFASDFASDFASDFASFASDFITakTejNazwySieNigdyNieUzywa
{
Przyłączam się do prośby o nadanie koledze certyfikatu MSCP. ;)