Zalecane, 2024

Wybór Redakcji

Różnica między boksowaniem a rozpakowywaniem w C #

W języku C # wszystkie typy wartości pochodzą z obiektu klasy. Zatem zmienna referencyjna obiektu typu może odnosić się do dowolnego innego typu wartości. C # wprowadza dwie metody do Boxingu i Unboxingu, które wiążą typ wartości z typem referencyjnym. Podstawową różnicą między Boxingiem a Unboxingiem jest to, że Boxing jest konwersją typu wartości na typ obiektu, podczas gdy w innych rękach termin Unboxing odnosi się do konwersji typu obiektu na typ wartości. Przeanalizujmy inne różnice między boksowaniem a rozpakowywaniem.

Wykres porównania

Podstawa do porównaniaBoksUnboxing
PodstawowyTyp obiektu odnosi się do typu wartości.proces pobierania wartości z pudełkowego obiektu.
PrzechowywanieWartość przechowywana na stosie jest kopiowana do obiektu przechowywanego w pamięci sterty.Wartość obiektu zapisana w pamięci sterty jest kopiowana do typu wartości przechowywanego na stosie.
KonwersjaImplicit conversion.Jawna konwersja.
Przykładint n = 24;
obiekt ob = n;
int m = (int) ob;

Definicja boksu

Boksowanie to procedura przekształcania typu wartości na typ obiektu. W tym przypadku typ wartości jest przechowywany na stosie, a typ obiektu jest przechowywany w pamięci sterty. Ta konwersja typu wartości na typ obiektu jest niejawną konwersją. Możesz bezpośrednio przypisać wartość do obiektu, a C # zajmie się resztą konwersji. Rozumiem Boxing na przykładzie.

 int i = 24; obiekt ob = i; // Wpisz liczbę całkowitą n w typ obiektu ob. lub obiekt ob1 = 21; // tutaj również typ obiektu ob1 odnosi się do typu integer 

W powyższym kodzie liczba całkowita typu i zawierająca wartość 24 jest przechowywana na stosie i jest kopiowana do typu obiektu ob. Typ obiektu odnosi się teraz do wartości całkowitej. Teraz "int i" zawiera także wartość 24, a "typ obiektu ob" również zawiera wartość 24, ale obie wartości są niezależne od siebie, tzn. Jeśli zmienisz wartość i, nie będzie odzwierciedlać zmiany w wartość ob.

Boks zużywa dodatkową pamięć wraz z dodatkowym czasem. Powodem jest to, że nowy obiekt, który będzie odnosił się do typu wartości, musi przydzielić przestrzeń pamięci na stercie. Następnie wartość typu wartości przechowywanego na stosie zostanie przeniesiona do typu obiektu na miejscu pamięci sterty.

Definicja Unboxing

Rewers Boxingu to Unboxing. Unboxing to konwersja typu obiektu do typu wartości. W trybie Unboxing wartość typu obiektu pudełkowego przechowywana na stercie jest przenoszona do typu wartości przechowywanego na stosie. W przeciwieństwie do Boxingu, Unboxing musi być zrobiony jawnie. Typ obiektu jest jawnie rzutowany na typ wartości, a typ wartości musi być taki sam jak wartość, do której odwołuje się typ obiektu. Rozumiemy koncepcję Unboxing na przykładzie.

 int i = 24; obiekt ob = i; // Wpisz liczbę całkowitą n w typ obiektu ob. int j = (int) ob; // Odblokuj wartość całkowitą zapisaną w obiekcie typu ob na liczbę całkowitą y. 

Wartość przechowywana w obiekcie ob jest pobierana przez rzutowanie go na typ taki, jak obiekt odnosi się do np. Typu integer "j".

Unboxing zużywa także więcej pamięci i więcej czasu. Ponieważ, gdy typ obiektu musi zostać rozpakowany, wówczas wartość typu obiektu przechowywana na stercie musi zostać przeniesiona do nowego typu wartości przechowywanego na stosie. Typ obiektu, którego wartość została pobrana, będzie teraz dostępna do czyszczenia pamięci.

Najważniejsze różnice między boksowaniem a rozpakowywaniem

  1. W boksie obiekt jest określany jako typ wartości. Z drugiej strony proces pobierania wartości z powrotem z obiektu pudełkowego nazywa się unboxing.
  2. Typ wartości przechowywany na stosie jest kopiowany do obiektu przechowywanego w pamięci sterty. Z drugiej strony podczas rozpakowywania obiekt przechowywany w pamięci sterty jest kopiowany do typu wartości przechowywanego w pamięci stosów.
  3. Boxing to niejawna konwersja, podczas gdy unboxing to jawna konwersja.

Wniosek:

Zarówno boksowanie, jak i rozpakowywanie zabierają więcej czasu i pamięci i są kosztowne obliczeniowo. Brakuje im również bezpieczeństwa typu i zwiększa czas wykonywania w czasie wykonywania. Zaleca się unikać zbytniego korzystania z boksu i rozpakowywania w programie.

Top