Сравнителна таблица
Основа за сравнение | бокс | Unboxing |
---|---|---|
Основен | Типът обект се отнася за типа стойност. | процес на извличане на стойност от обект в кутия. |
съхранение | Стойността, съхранена в стека, се копира в обекта, съхраняван в паметта на купчината. | Стойността на обекта, съхранена в паметта на купчината, се копира в типа на стойността, съхраняван в стека. |
конверсия | Имплицитно преобразуване. | Изрично преобразуване. |
пример | int n = 24; обект ob = n; | int m = (int) ob; |
Определение на бокса
Боксът е процедура за конвертиране на тип стойност в тип обект. Тук типът на стойността се съхранява в стека и типът на обекта се съхранява в купчината памет. Това преобразуване на тип стойност в тип обект е имплицитно преобразуване. Можете директно да присвоите стойност на обект и C # ще се справи с останалите реализации. Да разберем Бокс с пример.
int i = 24; обект ob = i; // Вграждаме цяло число от тип n в обект тип ob. или обект ob1 = 21; // тук също обект тип ob1 се отнася до цяло число тип
В по-горния код целочислен тип i, съдържащ стойност 24, се съхранява в стека и се копира в обект от тип ob. Тип обект сега се отнася до цяло число. Сега, "int i" също съдържа стойност 24 и "обект тип ob" също съдържа стойност 24, но и двете стойности са независими един от друг, т.е. ако промените стойността на i, тя няма да отразява промяната в стойност на ob.
Боксът изразходва допълнителна памет заедно с допълнителното време. Причината е, че нов обект, който ще се позове на типа стойност, трябва да разпредели мястото на паметта в купчината. След това стойността на типа стойност, която се съхранява в стека, ще бъде прехвърлена към обектен тип, на мястото на паметта на купчината.
Дефиниция на Unboxing
Обратното на бокса е Unboxing. Unboxing е преобразуване на типа обект в типа стойност. В Unboxing стойността на типа обект в кутия, съхранявана в купчината, се прехвърля към типа стойност, който се съхранява в стека. За разлика от Boxing, Unboxing трябва да се направи изрично. Типът обект е изрично отправен към типа стойност, а типът на стойността трябва да е същият като стойността, към която се отнася обектния тип. Да разберем концепцията за Unboxing с пример.
int i = 24; обект ob = i; // Вграждаме цяло число от тип n в обект тип ob. int j = (int) ob; // Unbox целочислената стойност, съхранена в обект от тип ob до integer type y.
Стойността, съхранена в обекта ob, се извлича чрез прехвърлянето й към типа същият като обекта, отнасящ се до т.е. цяло число тип “j”.
Unboxing също консумира повече памет и повече време. Тъй като, когато тип обект трябва да бъде отключен, стойността на типа обект, съхранявана в купчината, трябва да се прехвърли към новия тип стойност, съхранявана в стека. Типът обект, чиято стойност е извлечена, сега ще бъде на разположение за събиране на боклука.
Ключови разлики между бокса и отписването
- В бокса се прави обект, който се отнася за тип стойност. От друга страна, процесът на извличане на стойността от обекта в кутия се нарича unboxing.
- Типът стойност, съхранявана в стека, се копира в обекта, съхраняван в паметта на купчината. От друга страна, при unboxing, обект, съхраняван в паметта на купчината, се копира в тип стойност, съхранявана в паметта на стека.
- Боксът е имплицитно преобразуване, докато unboxing е изрично преобразуване.
Заключение:
Както боксът, така и unboxing консумират повече време и памет и те са изчислително скъпи. Те също така нямат сигурност за типа и увеличават режима на работа. Винаги се препоръчва да се избягва прекомерното използване на бокс и unboxing в програмата.