Skip to main content

Posts

Showing posts with the label generic

Where constraint wonder

In postul precedent am povestim putin despre where . Iata o constrîngere destul de interesanta pe care o putem face: class Car<TTItem,TItem> where TItem:IItem { public TSubItem GetColor<TSubItem>(string name) where TSubItem:TItem { ... } } Ce mi-a placut este ca putem sa ne definim o constrangere care sa contina un tip care este deja generic. Nice :)

Where clause

Mai mult ca sigur cu toÈ›ii am folosit clauza where . Pe scurt, where este folosit cĂ¢nd trebuie sa adaugăm o constrĂ¢ngere la un tip generic specificat la o clasa sau la o metoda. public class Car<TType> where TType : ICarModel {} In exemplul de mai sus o sa putem folosii tipuri generice TType doar dacă implementează interfaÈ›a ICarModel . In cazul in care vrem sa specificam ca tipul generic sa fie neaparat o clasa este nevoie sa ne folosim si de cuvantul rezervat class: public class Car<TType> where TType : ICarModel, class {} In cazul acesta, TType trebuie sa fie obligatoriu sa fie o clasa (nu va putea sa fie o structura de exemplu). Pentru structuri trebuie sa folosim cuvantul rezervat struct: public class Car<TType> where TType : struct {} Dar dacă vrem sa face new de un obiect de tip generic? In cazul aceasta trebuie sa specificam ca are un constructor default Ă®n clasau de where . Din păcate doar constructorul default fără parametri se poate specifica. I...

Covarianta si contravarianta in .NET 4.0

Covarianta si contravarinata au existat de la .NET 1.0. Schimbarea pe care a adus-o .NET 4.0 a fost ca a introdus aceste funcționalități si in tipurile generice. In teorie, un tip T este mai mare decat S, daca si numai daca S este un subtip( derivat) din T. Din acest enunt putem sa ajungem la concluzia ca exista o oarecare unitate de masura prin care se pot descrie tipurile( in forma unui arbore). Putem sa consideram ca T este clasa de baza, iar S este clasa derivata. Covarianta: daca Generic este mai mare sau egal decat Generic. Covarianta se folosește in special cand vrem ca de la ceva generic sa ajungem la ceva mai particular. Covarianta ne permite sa tratam un obiect ca si cum ar fi mai sus in ierarhie. Din aceasta cauza se ajunge ca proprietățile sa fie read-only din tipul generic. De exemplu daca avem un tip de baza Animal si doua clase care moștenesc aceasta clasa( Caine, Sarpe), in mod normal nu am putea sa avem: public class Animal{} public class Caine:Animal{} public class Sa...