Sobes.tech
Middle

Kas ir boxing un unboxing C# valodā un kā izvairīties no šiem procesiem?

sobes.tech AI

Atbilde no AI

Boxing (kārbošana) ir neizteikta pārvēršana no vērtību tipa uz atsauces tipu object vai jebkuru citu atsauces tipu, kas ir izriet no object. Šajā procesā vērtība tiek novietota jaunā atmiņas apgabalā pārvaldītajā kaudzē.

Unboxing (izpakošana) ir skaidra pārvēršana no object atsauces tipa uz vērtību tipu. Vispirms tiek pārbaudīts, vai objekts ir norādītā vērtību tipa instances, un pēc tam tā datu lauks tiek nokopēts no kaudzes.

Piemēri:

// Kārbošana (boxing)
int vērtībasTips = 10;
object atsauceTips = vērtībasTips; // vērtībasTips tiek iepakots `object`

// Izpakošana (unboxing)
int izpakotāVērtība = (int)atsauceTips; // atsauceTips tiek izpakots uz int

Kārbošanu un izpakošanu var izvairīties, izmantojot ģenerikus. Ģeneriskās kolekcijas un metodes darbojas tieši ar vērtību tipiem, neprasot to pārvēršanu uz object. Tas uzlabo veiktspēju un tipu drošību.

Piemērs ar ģenerikiem:

// Izmantojot List<T> vietā, kur ArrayList
using System.Collections.Generic;

List<int> ģeneriskaSaraksts = new List<int>();
ģeneriskaSaraksts.Add(10); // Bez kārbošanas

int vērtība = ģeneriskaSaraksts[0]; // Bez izpakošanas

Ģeneriku izmantošana novērš atmiņas piešķiršanas un datu kopēšanas izmaksas, kas saistītas ar kārbošanu un izpakošanu, kā arī novērš tipa kļūdas izpildes laikā.