Programarea generica sau programarea cu sabloane este un stil de programare diferit de OOP (Programare Orientata pe Obiecte). Acestea au in comun doar abstractizarea datelor si reutilizarea codului, dar abordarile sunt diferite.
Introducere
Pentru a putea continua seria de atestat, asa cum am mai precizat, trebuie sa lamurim anumite chestii de teorie, usurandu-ne mult munca in momentul aplicarii acestora. In metodele generice avem mai multe clase generice: List<T>, Dictionary<T>, etc. Voi detalia in mod special clasa generica List<T>, pentru ca, in mare parte, cu aceasta vom lucra, clasa Dictionary<T> fiind aproximativ identica cu List<T>.
Clasa generica List<T>
Aceasta clasa generica este echivalenta clasei non-generice ArrayList, dar mult mai performanta decat aceasta. Practic, ne vom gandi mereu ca aceasta lista este un vector generic. De aici putem intelege faptul ca vom putea adauga, sterge, folosi, prelucra si modifica orice element dintr-o lista. In momentul in care am descoperit aceste functii generice, nu intelegeam practic la ce ma ajuta (abia facusem bazele de date) si mi se parea acelasi lucru, oarecum, adica la baza de date acelasi lucru il faceam, adaugam, stergeam, selectam, actualizam. In schimb, dupa multe ore de antrenament si exercitiu, am realizat importanta si performanta functiilor generice. Acum, sa nu mai lungim vorba si sa discutam la obiect despre functiile acestea. Intai si intai trebuie sa stiti ca pentru a avea acces la clasa generica, trebuie sa aveti using System.Collections.Generic; la inceputul programului.
Definirea clasei generice List<T>
Pentru a defini clasa generica List<T> va trebui sa folosim urmatoarea sintaxa:
List<tip variabile dorite in lista> numeLista = new List<tip variabile dorite in lista>();
La tipul variabilelor dorite in lista putem pune orice fel de variabila existena in C#, adica putem pune List<int>, List<string>, List<Point>, etc. Pentru cei care nu stiu variabilele in C# ii sfatuiesc sa citeasca articolul: https://tutoriale-pe.net/variabilele-limbajul-de-programare-c/.
Exemplu:
Noi vom dori sa avem o lista cu numele elevilor clasei a XII-a E. Deci clar vom avea doar elemente de tip string, iar numele listei va fi listaElevi. Voi atasa mereu codul exemplului mai jos pentru a putea intelege procedeul de utilizare al claselor generice:
List<string> listaElevi = new List<string>();
Pentru a putea utiliza lista, mai intai este nevoie sa avem niste elemente adaugate, in cazul nostru elementele vor fi numele elevilor din clasa a XII-a E. Voi alege cateva nume aleatorii si anume: Catalin,Mihai,Radu,Ion,Vasile. Pentru adaugarea acestor nume vom folosi numeLista.Add(elemente de tipul variantei alese), in cazul de fata, listaElevi.Add(numele elevilor):
List<string> numeElevi = new List<string>(); numeElevi.Add("Catalin"); numeElevi.Add("Mihai"); numeElevi.Add("Radu"); numeElevi.Add("Ion"); numeElevi.Add("Vasile");
Acum vom incerca sa ne folosim de aceasta lista, in sensul ca vom utiliza cateva metode specifice acestei clase generice, si anume: Sort, Insert, Contains, Remove, Clear, Count, etc.
Pentru parcurgerea listei vom folosi foreach, si nu for ca la vectori, deoarece dupa parerea mea este cea mai rapida si usoara metoda de parcurgere a unei liste.
//Voi creea o variabila de tip string in foreach foreach(string nume in numeElevi) Console.Write(nume + " "); //afisez fiecare nume din lista si ii pun un spatiu Programul va afisa: Catalin Mihai Radu Ion Vasile
Pentru a afisa numarul de elemente din lista, se va folosi metoda numeLista.Count:
Console.WriteLine("\nNumarul de elevi din clasa a XII-a E: {0}", numeElevi.Count); Programul va afisa: 5
Inserarea unui element in lista se realizeaza prin utilizarea metodei numeLista.Insert(pozitie, variabila de tipul ales in definirea listei):
numeElevi.Insert(1, "Gheorghe"); Gheorghe va fi adaugat dupa Catalin: Catalin Gheorghe Mihai Radu Ion Vasile
Atentie! Numerotarea elementelor, ca la vectori, incepe de la 0, deci, pozitia 1 reprezinta cel de-al doilea element.
Pentru sortarea alfabetica este nevoie de metoda numeLista.Sort(); fara nicio alta adaugare.
numeElevi.Sort(); Intamplarea face ca numele sa fie deja ordonate alfabetic, dar voi face totusi o afisare cu for: for(int i = 0; i < numeElevi.Count; i++) Console.Write(numeElevi[i] + " ");
Pentru a verifica existenta unui anume element in lista vom folosi metoda numeLista.Contains(elementul pe caruia vrem sa ii verificam existenta);
Atentie! Aceasta metoda va returna doar true sau false.
numeElevi.Contains("Marian"); Programul va afisa: false numeElevi.Contains("Catalin"); Programul va afisa: true
Pentru a sterge un element din lista vom folosi metoda numeLista.Remove(elementul pe care dorim sa il stergem)
numeLista.Remove("Ion"); Dupa parcurgerea listei si afisarea acesteia programul va afisa: Catalin Gheorghe Mihai Radu Vasile
Pentru stergerea listei de elevi se va folosi metoda numeLista.Clear();
numeElevi.Clear(); La executarea comenzii Console.WriteLine(numeElevi.Count); se va afisa: 0