Obiecte (un ghid pentru programare în c #), docs Microsoft

În acest articol

Definiția unei clase sau a unei structuri este similară cu un desen, care indică acțiunile efectuate de tip. În esență, obiectul este un bloc de memorie alocat și configurat în conformitate cu desenul. Un program poate crea mai multe obiecte din aceeași clasă. Obiectele sunt, de asemenea, numite instanțe. Ele pot fi stocate fie într-o variabilă numită, fie într-o matrice sau colecție. Codul clientului este codul care utilizează aceste variabile pentru a apela metode și pentru a accesa proprietățile deschise ale obiectului. Într-un limbaj orientat pe obiecte, cum ar fi C #, programul standard constă din câteva obiecte care interacționează dinamic.







remarcă

Comportamentul tipurilor statice diferă de comportamentul descris aici. Pentru mai multe informații, consultați clasele statice și membrii de clasă statică.

Exemple de structură și instanțe de clase

Exemple de clase sunt create folosind noul operator. În exemplul de mai jos, Persoana este un tip, iar persoana1 și persoana 2 sunt instanțe sau obiecte de acest tip.

Deoarece structurile sunt tipuri de valoare, o copie a întregului obiect este stocată în variabila obiect structură. De asemenea, pot fi create instanțe de structuri utilizând noul operator. cu toate acestea, nu este obligatoriu, așa cum se arată în următorul exemplu:

Memoria pentru p1 și p2 este alocată în stivă de fire. Această memorie este eliberată împreună cu tipul sau metoda în care este declarată. Acesta este unul dintre motivele pentru care structurile sunt copiate când sunt atribuite. Dimpotrivă, atunci când toate referințele la un obiect ies din domeniul de aplicare, CLR eliberează automat memoria (efectuează colecția de gunoi) alocată instanței de clasă. Posibilitatea distrugerii deterministe a unui obiect de clasă, disponibilă în C ++, nu este disponibilă în acest caz. Pentru mai multe informații despre colectarea gunoiului în .NET Framework, consultați Colecția de gunoi.







remarcă

În CLR, procesul de alocare și eliberare a memoriei într-un heap administrat este optimizat în mod semnificativ. În majoritatea cazurilor, nu există o diferență semnificativă în costul de performanță pentru alocarea unei instanțe de clasă pe heap și alocarea unei instanțe de structură pe stivă.

Identificarea obiectelor și egalitatea valorilor

Comparând două obiecte pentru egalitate, mai întâi trebuie să stabiliți dacă trebuie să știți dacă două variabile reprezintă un obiect în memorie sau valorile unuia sau mai multor câmpuri sunt egale. Dacă intenționați să comparați valorile, trebuie să decideți dacă obiectele sunt instanțe ale tipurilor de valori (structuri) sau ale tipurilor de referință (clase, delegați, matrice).

Pentru a determina dacă două instanțe ale unei clase se referă la aceeași locație din memorie (adică au același identificator), utilizați metoda statică Equals. (System.Object este o clasă de bază implicită pentru toate tipurile de valori și tipuri de referință, inclusiv structuri și clase definite de utilizator).

Pentru a determina dacă câmpurile de instanță din cele două instanțe ale structurii au aceleași valori, utilizați metoda ValueType.Equals. Deoarece toate structurile sunt implicit moștenite de la System.ValueType. metoda poate fi apelată direct în obiect, după cum se arată în următorul exemplu:

În implementarea System.ValueType Equals, se folosește reflecția, deoarece este necesară determinarea câmpurilor disponibile în orice structură. Atunci când vă creați propriile structuri, redefiniți metoda Equals pentru a oferi un algoritm eficient de egalitate care se potrivește cu tipul dvs.

  • Pentru a determina dacă valorile câmpului sunt egale în două instanțe ale clasei, puteți utiliza metoda Equals sau operatorul ==. Cu toate acestea, ele ar trebui folosite numai dacă sunt suprasolicitate sau supraîncărcate de către clasă pentru a oferi o definiție personalizată a egalității pentru obiecte de acest tip. O clasă poate implementa, de asemenea, interfața IEquatable sau interfața IEqualityComparer. Ambele interfețe oferă metode pe care le puteți utiliza pentru a testa egalitatea valorilor. Atunci când creați propriile clase care suprascriu Equals. urmați instrucțiunile din secțiunea Cum se face. Determinați egalitatea valorilor pentru un tip și Object.Equals (Object).

Subiecte conexe







Trimiteți-le prietenilor: