Ieteicams, 2024

Redaktora Izvēle

Atšķirība starp boksa un noņemšanas iespējām C #

C #, visi vērtību veidi ir atvasināti no klases objekta. Tātad tipa objekta atsauces mainīgais var attiekties uz jebkuru citu vērtības veidu. C # ievieš divas metodes, lai Boxing un Unboxing, kas savieno vērtību veidu ar atsauces tipu. Galvenā atšķirība starp Boxing un Unboxing ir tā, ka Bokss ir vērtības tipa pārveidošana par objekta tipu, savukārt citās rokās termins Unboxing attiecas uz objekta tipa pārveidošanu par vērtības veidu. Izpētīsim citas atšķirības starp Boksu un Unboxing.

Salīdzinājuma diagramma

Salīdzinājuma pamatsBokssNoņemšana
PamataObjekta tips attiecas uz vērtības veidu.vērtību no kastēta objekta.
GlabāšanaStekā saglabātā vērtība tiek kopēta uz objektu, kas saglabāts kaudzes atmiņā.Objekta vērtība, kas saglabāta kaudzes atmiņā, tiek pārkopēta uz vērtību, kas tiek glabāta kaudzē.
KonversijaNetieša konversija.Skaidra konversija.
Piemērsint n = 24;
objekts ob = n;
int m = (int) ob;

Boksa definīcija

Bokss ir procedūra, ar kuru vērtību veidu pārveido par objekta tipu. Šeit vērtība tiek saglabāta kaudzē, un objekta tips tiek saglabāts kaudzes atmiņā. Šī vērtības veida pārveidošana par objekta tipu ir netieša konversija. Varat tieši piešķirt vērtību objektam, un C # apstrādās pārējo reklāmguvumu. Sapratīsim Boxing ar piemēru.

 int i = 24; objekts ob = i; // Kastīte n vesels skaitlis objekta tipā ob. vai objekts ob1 = 21; // šeit arī objekta tips ob1 attiecas uz veselu skaitli 

Iepriekš minētajā kodā kopējais skaitlis i, kas satur vērtību 24, tiek saglabāts kaudzē un tiek kopēts objekta tipam ob. Objekta tips tagad attiecas uz veselu skaitli. Tagad „int i” satur arī vērtību 24, un “objekta tips ob” satur arī vērtību 24, bet abas vērtības ir viena no otras neatkarīgas, ti, ja maināt i vērtību, tas neatspoguļos izmaiņas vērtība ob.

Bokss patērē papildus atmiņu kopā ar papildu laiku. Iemesls ir tāds, ka jaunam objektam, kas attieksies uz vērtības veidu, ir jāpiešķir atmiņas vieta uz kaudzes. Tālāk kaudzes atmiņā saglabātās vērtības tipa vērtība tiks pārsūtīta uz objekta tipu, uz kaudzes atmiņas vietas.

Unboxing definīcija

Boksa otrā puse ir Unboxing. Noņemšana no kastes ir objekta tipa pārveidošana par vērtības veidu. In Unboxing (kastīteņu noņemšana) kastē saglabātā kastētā objekta tipa vērtība tiek pārnesta uz vērtību, kas tiek glabāta kaudzē. Atšķirībā no boksa, Unboxing ir jādara skaidri. Objekta tips ir skaidri izteikts vērtības tipam, un vērtības tipam ir jābūt tādam pašam kā vērtība, uz kuru attiecas objekta tips. Sapratīsim Unboxing koncepciju ar piemēru.

 int i = 24; objekts ob = i; // Kastīte n vesels skaitlis objekta tipā ob. int j = (int) ob; // Noņemiet veselu skaitļa vērtību, kas saglabāta objekta tipā ob uz veselu skaitli y. 

Objektā ob saglabātā vērtība tiek ielādēta, izliekot to tādā pašā veidā kā objekts, kas attiecas uz veselo skaitli “j”.

Unboxing arī patērē vairāk atmiņas un vairāk laika. Tā kā, kad objekta tipam ir jābūt nesaiņķotam, tad kaudzē glabātā objekta tipa vērtība ir jāpārsūta uz jauno vērtību, kas tiek glabāta kaudzē. Objekta tips, kura vērtība ir atgūta, tagad būs pieejama atkritumu savākšanai.

Galvenās atšķirības starp boksa un atvilkšanas iespējām

  1. Boksā objekts tiek apzīmēts kā vērtības veids. No otras puses, vērtību atgūšana no kastes objekta tiek saukta par unboxing.
  2. Stekā saglabāts vērtības tips tiek kopēts uz objektu, kas saglabāts kaudzes atmiņā. No otras puses, atlaižot kārbu atmiņā glabāto objektu tiek kopēts uz vērtības tipu, kas tiek glabāts kaudze atmiņā.
  3. Bokss ir netiešs reklāmguvums, turpretī izņemšana no kastes ir skaidra konvertācija.

Secinājums:

Gan bokss, gan atdalīšana patērē vairāk laika un atmiņas, un tie ir skaitļošanas ziņā dārgi. Viņiem trūkst arī tipa drošības un palielinās runtime overhead. Vienmēr ir ieteicams izvairīties no pārāk daudz boksa un atlaišanas izmantošanas programmā.

Top