Junior
Kāda ir atšķirība starp atsauces un vērtības tipiem?
sobes.tech AI
Atbilde no AI
Atšķirības datu glabāšanas un pārraides veidos:
-
Vērtību tipi (Value Types):
- Glabājas tieši tur, kur tie tika deklarēti (stacijā vai iekšā vērtību tipa piemēra).
- Pie piešķiršanas vai pārraides ar vērtību, tiek izveidots vērtības kopija.
- Ietver primitivus tipus (int, float, bool utt.), struktūras (struct) un enumus (enum).
- Tie ir noslēgti (sealed) un nevar mantoņot.
-
Atsauces tipi (Reference Types):
- Glabājas heap'ā. Mainīgais satur ne vērtību, bet atsauci uz adresi heap'ā.
- Pie piešķiršanas vai pārraides ar vērtību, tiek kopēta tikai atsauce, ne objekts.
- Ietver klases (class), interfeisus (interface), delegātus (delegate) un masīvus (array).
- Var atbalstīt mantošanu.
- Atkritumu savācējs (garbage collector) pārvalda atmiņas atbrīvošanu, ja vairs nav aktīvu atsauču uz objektu.
// Vērtību tipa piemērs (struct)
struct Point
{
public int X;
public int Y;
}
// Atsauces tipa piemērs (class)
class Circle
{
public int Radius;
}
| Īpašība | Vērtību tipi | Atsauces tipi |
|---|---|---|
| Glabāšanas vieta | Staka vai iekšā vērtību tipa piemēra | Heap |
| Pārraide/Priskaitījums | Vērtības kopija | Atsauces kopija |
| Mantošana | Nē | Jā |
| Atmiņas pārvaldība | Automātiska (staka) | Atkritumu savācējs |