
Salīdzinājuma diagramma
Salīdzinājuma pamats | Bokss | Noņemšana |
---|---|---|
Pamata | Objekta tips attiecas uz vērtības veidu. | vērtību no kastēta objekta. |
Glabāšana | Stekā 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ē. |
Konversija | Netieša konversija. | Skaidra konversija. |
Piemērs | int 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
- 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.
- 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ņā.
- 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ā.