Despre .Net Framework putem spune ca reprezinta o biblioteca ce contine o multitudine de clase pe care le putem folosi intr-o aplicatie dezvoltata in C#. Toate aceste clase mostenesc Object.
Clasa Object reprezinta clasa de baza pentru toate tipurile din .Net. Fie ca sunt tipuri valoare, referinta, predefinte sau create de utilizator, toate deriva din clasa Object. De exemplu, urmatoarele secvente de cod sunt identice:
/// <summary>
/// Clasa Agent mosteneste implicit clasa Object
/// </summary>
class Agent
{
public int Code { get; set; }
}
/// <summary>
/// Clasa Agent mosteneste explicit clasa Object
/// </summary>
class Agent : Object
{
public int Code { get; set; }
}
CLR cere ca toate obiectele sa fie create cu ajutorul operatorului new. Ca sa cream un obiect de tipul Agent, vom scrie urmatorul cod:
Agent a = new Agent();
Prin aceasta linie de cod, au loc mai multe operatii:
Dupa aceste operatii realizate de new, este returnata referinta catre obiectul nou creat. In exemplul nostru, referinta este salvata in variabila a, aflata pe stack. Instanta creata de tip Agent este salvata pe heap, iar a.Code va fi null.
Operatul new nu are un operator complementar pentru distrugerea obiectului pentru ca CLR va folosi garbage collector-ul pentru a detecta obiectele care nu mai sunt folosite sau accesate si va elibera memoria in mod automat.
Clasa object are cateva metode publice, ceea ce inseamna ca orice tip derivat le va contine.
Clasele derivate pot suprascrie metodele virtuale Equals, care determina daca doua obiecte au aceeasi valoare, GetHashCode care va returna un cod hash pentru valoare obiectului, ToString care, in mod implicit, va returna numele complet al tipului, tip returnat de metoda GetType. Metoda Finalize, tot virtuala, va fi chemata in momentul in care GC se apeleaza sau atunci cand se forteaza apelarea lui. Se foloseste pentru a elibera resurse externe, folosite de obiectul respectiv.
Metodele statice Equals si ReferenceEquals ajuta la compararea obiectelor. Un exemplu pentru folosirea acestor metode poate fi gasit in articolul Egalitate in C#.
Metoda protected MemberwiseClone va crea o copie a obiectului. Articolul Shallow copy in C# prezinta un exemplu de folosire a metodei.
Object este de tip referinta pentru ca este o clasa. In ciuda acestui fapt, tipurile valoare pot fi convertite ca object si de la object. Acest lucru poarta numele de type unification. Cand se face conversia de la valoare la object are loc procesul de boxing, iar de la object la tipul valoare initial procesul se numeste unboxing. Despre cele doua concepte s-a discutat in articolul Conversia datelor.
Pingback/Trackback
Valoare vs. referinta (I) | by zeltera