Ty to wiesz, ja to wiem, ktoś kto nie widzi słowa kluczowego delegate może uznać to za brak delegatów.
Bo w ogóle, to wydaje mi się, że autorowi chodziło o to, czy sami jawnie definiujemy delegaty, a nie o użycie istniejących bądź niejawnych.
No właśnie, dokładnie o to mi chodziło.
Ja jakoś w życiowych swoich programach nie mogłem znaleźć sensownego zastosowania delegatów. Podane wyżej kody są jak dla mnie mało czytelne np to:
lines.Select(x => x.Length).Where(x => x > 8).Sum();
Zapisałbym tak:
int total = 0;
foreach (string line in lines)
{
if (line.Length > 8)
total += line.Length;
}
albo w ogóle crazy:
int total = 0;
foreach (string line in lines)
if (line.Length > 8) total += line.Length;
I jak dla mnie jest to dużo bardziej czytelne, aczkolwiek mniej pr0 :) Jest to zapewne moja wina, gdyż nie mam obycia z LINQ zbyt dużego, ale... skoro można tak to po co sobie "udziwniać"?
No chyba, że ten "dziwny" kod np działa nieco szybciej itd.
Już o takich zapisach nie wspominam nawet:
Func<bool, int> IsGreaterThan8 = x=> x > 8; // delegat
Func<string, int> GetStringLength = s => s.Length; // delegat
var lines3 = lines.Select<string,int>(GetStringLength).Where<int>(IsGreaterThan8).Sum();
Na pierwszy rzut oka nic nie widzę tutaj i nie wiem co ten kod robi. Muszę się w niego zagłębić i czytać po 3 razy jedną linijkę. Nie o to chyba chodzi. Jednak tak jak mówię, nie jestem zbyt pr0 w C# i być może po prostu mam za mało obycia.
Delegaty i eventy w klasach to jedyna fajna rzeczy, która mi się w tym podoba. Może tutaj faktycznie popracuję i stworzę coś tylko dla zabawy, ale własnie za pomocą tych "technik"
Dziękuję wszystkim za odpowiedzi :)