Ինչ է boxing և unboxing C#-ում և ինչպես կարելի է խուսափել այդ գործընթացներից?
sobes.tech AI
Պատասխան AI-ից
Boxing (փաթեթավորում) — դա արժեքային տիպի անուղղակի փոխարկումն է դեպի հղումային տիպ object կամ ցանկացած այլ object-ից ժառանգած հղումային տիպ։ Այս գործընթացում արժեքը տեղադրվում է կառավարվող հոսքի նոր տարածքում։
Unboxing (անփաթեթավորում) — դա բացահայտ փոխարկումն է object հղումային տիպից դեպի արժեքային տիպ։ Նախ ստուգվում է, արդյոք օբյեկտը հանդիսանում է ցանկալի արժեքային տիպի օրինակ, և ապա նրա տվյալների դաշտը պատճենվում է հոսքից։
Օրինակներ՝
// Փաթեթավորում (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]; // Չկա անփաթեթավորում
Գեներիկների օգտագործումը կանխում է հիշողության բաժանման և տվյալների պատճենահանման ծախսերը փաթեթավորման/անփաթեթավորման ժամանակ, ինչպես նաև կանխում է տիպային սխալները գործարկման ժամանակ։