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 |