Sobes.tech
Junior

Mis vahe on viite- ja väärtustüüpidel?

sobes.tech AI

Vastus AI-lt

Erinevus andmete salvestamise ja edastamise viisis:

  • Väärtusetüübid (Value Types):

    • Salvestatakse otse seal, kus need on deklareeritud (virnas või väärtusetüübi eksemplaris).
    • Väärtuse omistamisel või väärtuse järgi edastamisel luuakse väärtuse koopia.
    • Sisaldavad primitiivseid tüüpe (int, float, bool jne), struktuure (struct) ja loendeid (enum).
    • On suletud (sealed) ja ei saa pärida.
  • Viidetüübid (Reference Types):

    • Salvestatakse virnas. Muutuja sisaldab mitte väärtust ise, vaid viidet virna aadressile.
    • Väärtuse omistamisel või väärtuse järgi edastamisel kopeeritakse ainult viide, mitte objekti väärtus.
    • Sisaldavad klasse (class), liideseid (interface), delegaate (delegate) ja massiive (array).
    • Võivad toetada pärimist.
    • Prügikoristaja haldab mälu vabastamist viidetega objektidele, millele pole aktiivseid viiteid.
// Näide väärtusetüübist (struct)
struct Point
{
    public int X;
    public int Y;
}

// Näide viidetüübist (class)
class Circle
{
    public int Radius;
}
Omadus Väärtusetüübid Viidetüübid
Salvestuskoht Virn või väärtusetüübi eksemplaris Virn
Edastamine / Omistamine Väärtuse koopia Viite koopia
Pärimine Ei Jah
Mälu haldamine Automaatne (virn) Prügikoristaja