Cea mai esențială diferență dintre class și struct este că class este un tip de referință, în timp ce struct este un tip value, iar alocarea lor în memorie este diferită.
Ce este clasa?
Clasa, un concept fundamental în programarea orientată pe obiecte, este un tip de structură de date personalizată care conține de obicei câmpuri, atribute, metode, atribute, constructori, indexatori, operatori etc. În .NET, toate clasele moștenesc în cele din urmă de la clasa System.Object, deci sunt un tip de referință, adică atunci când ai o instanță a unei clase, adresa acelei instanțe din heap gestionat este stocată pe stack, iar valoarea instanței este stocată în heap administrat.
Ce este un struct?
O structură este un tip de valoare folosit pentru a organiza un set de variabile înrudite într-o singură entitate variabilă. Toate structurile sunt moștenite din clasa System.ValueType, deci sunt un tip de valoare, adică instanța struct este creată pe stivulă unde este atribuit firul și stochează valoarea în sine. Așadar, când folosim struct, îl putem trata ca pe o clasă de tip de bază, cum ar fi int și char.
1. clasa este tipul de referință, iar structs este tipul de valoare
Deoarece clasa este un tip de referință, clasa poate fi setată ca nulă. Dar nu putem face struct-ul nul pentru că este un tip de valoare.
2. Când instanțiezi o clasă, aceasta va fi creată pe heap. Și instanțiezi un struct, care va fi creat pe stivă
3. Folosești o referință la o instanță de clasă. Și nu folosești o referință la un struct. (în schimb, folosește-le direct)
4. Când trecem clasa ca argument către o metodă, trecem o referință. Struct transmite o valoare, nu o referință.
5. structurile nu pot avea inițializatoare, clasele pot avea inițializatoare.
6. Clasele pot avea constructori fără parametri evidenți, dar Struct-urile nu pot
7. Noul cuvânt-cheie trebuie instanțiat înainte ca clasa să fie folosită, iar Structul nu are nevoie de acesta
8. Clasa susține moștenirea și polimorfismul, Struct nu. Notă: Dar Struct poate implementa interfețe la fel ca clasele
9. Deoarece Struct nu suportă moștenirea, membrii săi nu pot fi modificați cu Internal protejat sau protejat
10. Constructorul lui Class nu trebuie să inițializeze toate câmpurile, iar constructorul lui Struct trebuie să inițializeze toate câmpurile
11. Clasa poate defini un distrugător, dar Struct nu poate
12. Clasa este potrivită pentru date mari și complexe, iar Struct este potrivită pentru tipuri noi care sunt adesea folosite ca o combinație a unor date.
Ocazii aplicabile: Struct are avantaje de performanță, iar Class are avantaje de extensie orientate pe obiecte.
Tipul folosit pentru depozitul de date de bază este conceput ca un tip Struct, iar tipul folosit pentru a defini comportamentul aplicației este conceput ca o Clasă. Dacă nu ești sigur de aplicarea viitoare a tipului, ar trebui să folosești Class. |