Sobes.tech
Middle

C# ში boxing და unboxing რა არის და როგორ შეიძლება ამ პროცესების თავიდან აცილება?

sobes.tech AI

პასუხი AI-სგან

Boxing (შეფუთვა) — ეს არის მნიშვნელობის ტიპის არაოფიციალური გადაყვანა რეფერენციულ ტიპში object ან სხვა ნებისმიერი object-დან მემკვიდრეობით მიღებული რეფერენციული ტიპი. ამ პროცესში მნიშვნელობა მოთავსებულია ახალი მეხსიერების ზონაში მართვად heap-ზე.

Unboxing (გადმოწევა) — ეს არის გამჭვირვალე გადაყვანა object-ის რეფერენციულ ტიპიდან მნიშვნელობის ტიპზე. პირველ რიგში, ხდება შემოწმება, არის თუ არა ობიექტი იმ ტიპის ინსტანცია, რომელიც საჭიროა, და შემდეგ მისი მონაცემთა ველი იწერება heap-დან.

მაგალითები:

// შეფუთვა (boxing)
int მნიშვნელობისტიპი = 10;
object რეფერენციულიტიპი = მნიშვნელობისტიპი; // მნიშვნელობისტიპი შეფუთულია `object`-ში

// გადმოწევა (unboxing)
int გამოტანილი_მნიშვნელობა = (int)რეფერენციულიტიპი; // რეფერენციულიტიპი გადმოწერილია `int`-ში

შეფუთვა და გადმოწევის თავიდან აცილება შეიძლება გენერიკების გამოყენებით. გენერიკ კოლექციები და მეთოდები პირდაპირ მუშაობენ მნიშვნელობის ტიპებთან, არ საჭიროებს მათ object-ად გარდაქმნას. ეს ზრდის შესრულების სიჩქარეს და ტიპის უსაფრთხოებას.

მაგალითი გენერიკებით:

// List<T>-ის გამოყენება ArrayList-ის ნაცვლად
using System.Collections.Generic;

List<int> გენერიკული_სია = new List<int>();
გენერიკული_სია.Add(10); // შეფუთვა არ არის

int მნიშვნელობა = გენერიკული_სია[0]; // გადმოწევა არ არის

გენერიკების გამოყენება თავიდან აცილებს მეხსიერების განაწილებას და მონაცემთა კოპირებას შეფუთვის/გადმოწევის დროს, ასევე თავიდან აცილებს ტიპის შეცდომებს შესრულების დროს.