Jämförelsediagram
Grunder för jämförelse | Boxning | uppackning |
---|---|---|
Grundläggande | Objekttyp avser värdetypen. | Process för att hämta värde från det boxade objektet. |
Lagring | Värdet som lagras på stapeln kopieras till objektet som är lagrat i heapminne. | Objektets värde lagrat i heapminnet kopieras till den värde som lagras på stapeln. |
Omvandling | Implicit konvertering. | Explicit konvertering. |
Exempel | int n = 24; objekt ob = n; | int m = (int) ob; |
Definition av boxning
Boxning är ett förfarande för att konvertera en värde typ till en objekttyp. Här lagras värdetypen i stapeln, och objekttypen lagras i heapminnet. Denna omvandling av värde typ till objekttypen är en implicit konvertering. Du kan direkt tilldela ett värde till ett objekt och C # hanterar restenkonvertering. Låt oss förstå Boxing med ett exempel.
int i = 24; objekt ob = i; // Låsa heltalstypen n till objekttyp ob. eller objekt ob1 = 21; // här hänvisar även en objekttyp ob1 till en heltalstyp
I ovanstående kod lagras heltalstypen I som innehåller värdet 24 på stapeln och kopieras till objekttypen ob. En objekttyp hänvisar nu till ett heltal. Nu innehåller "int i" också värde 24 och "objekttyp ob" innehåller också värde 24, men båda värdena är oberoende av varandra, dvs om du ändrar värdet på jag, kommer det inte att återspegla förändringen i värdet på ob.
Boxning förbrukar extra minne tillsammans med extra tid. Anledningen är att ett nytt objekt, som kommer att referera till värdetypen, måste allokera minnesutrymmet på högen. Därefter överföres värdet av den värdetyp som lagras i stapeln till ob-objekttypen, på minnesplatsen.
Definition av Unboxing
Omvänden av Boxning är Unboxing. Unboxing är en omvandling av objekttypen till värdetypen. I Unboxing överförs värdet av den boxade objekttyp som lagras på högen till den värde som lagras på stapeln. Till skillnad från Boxning måste Unboxing utföras explicit. Objekttypen är uttryckligen gjuten till värdetypen och värdetypen måste vara densamma som det värde som objekttypen refererar till. Låt oss förstå konceptet Unboxing med ett exempel.
int i = 24; objekt ob = i; // Låsa heltalstypen n till objekttyp ob. int j = (int) ob; // Unboxera heltalsvärdet lagrat i objekttyp ob till heltalstyp y.
Värdet som lagras i objektobjektet hämtas genom att casta det till den typ som objektet hänvisade till dvs heltalstyp "j".
Unboxing förbrukar också mer minne och mer tid. Eftersom en objekttyp måste vara ombokad måste värdet av objekttypen som lagras på högen överföras till den nya värde typen som lagras på stapeln. Objekttypen vars värde som hämtats kommer nu att vara tillgängligt för insamling av skräp.
Viktiga skillnader mellan Boxning och Unboxing
- I boxning görs ett objekt för att referera som en värdetyp. Å andra sidan kallas processen för att hämta värdet tillbaka från det boxade objektet unboxing.
- En värdetyp som lagras på en stapel kopieras till objektet som är lagrat i heapminne. Å andra sidan kopieras ett objekt som lagrats i heapminne i en avkodning till en värde som lagras i stapminnet.
- Boxning är en implicit konvertering medan unboxing är en explicit konvertering.
Slutsats:
Både boxning och unboxing förbrukar mer tid och minne, och de är beräkningsmässigt dyra. De saknar också typsäkerhet och ökar runtime-driften. Det rekommenderas alltid att undvika för mycket användning av boxning och unboxing i programmet.