Sobes.tech
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 "Пётр"