Sobes.tech
Middle

Ինչ է 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]; // Չկա անփաթեթավորում

Գեներիկների օգտագործումը կանխում է հիշողության բաժանման և տվյալների պատճենահանման ծախսերը փաթեթավորման/անփաթեթավորման ժամանակ, ինչպես նաև կանխում է տիպային սխալները գործարկման ժամանակ։