Înainte de a putea începe să ne ocupăm de LINQ, trebuie mai întâi să înțelegem principiile care stau la baza sa. LINQ se referă la operațiuni asupra colecțiilor de date, deci, ați ghicit: ne vom ocupa de colecții.
Ați aflat deja că dintre toate structurile de date, array-urile sunt cele mai rapide, deoarece sunt structuri de date non-generice nesortate.… Read more
În lecția despre metodele de extensie, am aflat că acestea sunt un mod frumos de a adăuga funcționalitate suplimentară tipurilor deja existente, și am făcut acest lucru prin adăugarea unei metode statice într-o clasă statică, care a luat un parametru de tip, prefixat de cuvântul cheie
this, astfel:
Deci, deși clasa mea originală
Carte nu conține o metodă numită
VindeExemplar(), pot să o apelez în metoda
Main() deoarece am declarat o metodă de extensie pentru clasa
Carte, iar această metodă statică
VindeExemplar() a luat un parametru de tip
Carte prefixat de cuvântul cheie
this, care semnalează compilatorului că metoda este intenționată ca o metodă de extensie pentru tipul
Carte.… Read more
Uneori, programatorii consideră că au nevoie să adauge funcționalități noi codurilor deja existente, pentru a le îmbunătăți sau a le completa. În cazul în care respectivul codul sursă este disponibil, sarcina este simplă – trebuie doar să adauge funcționalitatea necesară și să recompileze.… Read more
Hai să vorbim despre un subiect pe care n-ar trebui să-l întâlniți în experiența voastră zilnică de programare, dar de care ar trebui să fiți totuși conștienți, dacă doriți să deveniți ingineri profesioniști: covarianța și contravarianța delegaților. Sunt termeni generali de programare, deci, îi veți întâlni și în alte limbaje de programare, nu doar C#.… Read more
Ați observat probabil faptul că în aproape toate lecțiile anterioare în care am discutat despre evenimente, am folosit Action ca tipul de delegat pentru eveniment. Evident, puteți utiliza orice tip de delegat doriți, dar, în marea majoritate a cazurilor, prin convenție (și doar prin convenție!),… Read more
În lecția anterioară v-am arătat modul în care compilatorul implementează concret evenimentele, adăugând de fapt în fundal două metode numite addon() și removeon() și făcând câmpul Action privat, astfel încât să nu îl putem invoca în mod direct. Dar acest lucru a fost efectuat în limbajul MSIL, iar noi nu trebuie să ne preocupăm cu un nivel atât de jos.… Read more
Evenimentele reprezintă un mod mai sigur de implementare a tiparului observatorului descris în lecția precedentă, și sunt pasul evolutiv al delegaților bruti. Este posibil să fi auzit despre programarea bazată pe evenimente ca un concept ce descrie o paradigmă de programare în care fluxul programului este determinat de evenimente precum acțiuni ale utilizatorului (click-uri de mouse, apăsări de taste), ieșiri ale senzorilor ori mesaje din alte programe sau fire de execuție.… Read more
Conform Microsoft, tiparul observatorului este un design comportamental care permite unui obiect să notifice alte obiecte despre modificări ale stării sale.
Multor programatori începători (și chiar și celor mai experimentați) le este greu să înțeleagă legătura dintre delegați și evenimente, iar fundația pe care este construită această legătură este reprezentată tocmai de tiparul observatorului.… Read more
Amintiți-vă din lecția expresii lambda că putem declara o metodă local, fără nume, și să o folosim într-un singur loc, acolo unde o declarăm. Acesta este un exemplu de expresie lambda: