Препоръчано, 2019

Избор На Редактора

Разлика между бокса и разопаковането в C #

В C # всички типове стойности се извличат от обекта клас. Така че, референтна променлива от тип обект може да се отнася за всеки друг тип стойност. C # въвежда два метода за Boxing и Unboxing, които свързват типа на стойността с референтния тип. Основната разлика между Boxing и Unboxing е, че Boxing е преобразуването на типа стойност в тип обект, докато на други ръце терминът Unboxing се отнася до превръщането на типа обект в тип стойност. Нека разгледаме другите разлики между бокса и разопаковането.

Сравнителна таблица

Основа за сравнениебокс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 също консумира повече памет и повече време. Тъй като, когато тип обект трябва да бъде отключен, стойността на типа обект, съхранявана в купчината, трябва да се прехвърли към новия тип стойност, съхранявана в стека. Типът обект, чиято стойност е извлечена, сега ще бъде на разположение за събиране на боклука.

Ключови разлики между бокса и отписването

  1. В бокса се прави обект, който се отнася за тип стойност. От друга страна, процесът на извличане на стойността от обекта в кутия се нарича unboxing.
  2. Типът стойност, съхранявана в стека, се копира в обекта, съхраняван в паметта на купчината. От друга страна, при unboxing, обект, съхраняван в паметта на купчината, се копира в тип стойност, съхранявана в паметта на стека.
  3. Боксът е имплицитно преобразуване, докато unboxing е изрично преобразуване.

Заключение:

Както боксът, така и unboxing консумират повече време и памет и те са изчислително скъпи. Те също така нямат сигурност за типа и увеличават режима на работа. Винаги се препоръчва да се избягва прекомерното използване на бокс и unboxing в програмата.

Top