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]; // გადმოწევა არ არის
გენერიკების გამოყენება თავიდან აცილებს მეხსიერების განაწილებას და მონაცემთა კოპირებას შეფუთვის/გადმოწევის დროს, ასევე თავიდან აცილებს ტიპის შეცდომებს შესრულების დროს.