Błąd projektowy C#?

19.12.2008 11:18 in C#, IO, programowanie

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. ;)

Comments:

Leave comment: