Junior — Middle
Kādas ir atšķirības starp atsauces tipiem un vērtību tipiem C# un kādas ir galvenās atšķirības to izmantošanā?
sobes.tech AI
Atbilde no AI
C# valodā tipi iedala divās kategorijās: vērtību tipus (value types) un atsauces tipus (reference types).
Vērtību tipi tieši glabā datus. Piemēri: int, double, struct. Piešķirot vai nododot uz metodi, tiek kopēta pati vērtība, tas ir, tiek izveidots neatkarīgs kopijas eksemplārs.
Atsauces tipi glabā atsauci uz objektu atmiņā (heap). Piemēri: class, string, masīvi. Piešķirot, tiek kopēta tikai atsauce, ne objekts, tāpēc vairāki mainīgie var atsaukties uz to pašu objektu.
Galvenās atšķirības:
- Glabāšana: vērtību tipi parasti ir steka (stack), atsauces tipi — heap.
- Kopēšana: vērtību tipi tiek kopēti pēc vērtības, atsauces tipi — pēc atsauces.
- Uzvedība mainoties: vērtību tipa izmaiņas neietekmē citas kopijas, atsauces tipa objekta izmaiņas atspoguļojas visās atsaucēs.
Piemērs:
int a = 5;
int b = a; // vērtības kopija
a = 10; // a paliks 5
class Persona { public string Vards; }
Persona p1 = new Persona { Vards = "Иван" };
Persona p2 = p1; // atsauces kopija
p2.Vards = "Пётр"; // p1.Vards arī mainīsies uz "Пётр"