Sobes.tech
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
Atmiņas pārvaldība Automātiska (staka) Atkritumu savācējs