Różnica między boksem a rozpakowaniem w C #

Autor: Laura McKinney
Data Utworzenia: 2 Kwiecień 2021
Data Aktualizacji: 5 Móc 2024
Anonim
Różnica między boksem a rozpakowaniem w C # - Technologia
Różnica między boksem a rozpakowaniem w C # - Technologia

Zawartość


W języku C # wszystkie typy wartości pochodzą z obiektu klasy. Zatem zmienna referencyjna typu obiekt może odnosić się do dowolnego innego typu wartości. C # wprowadza dwie metody Boksowania i Rozpakowywania, które łączą typ wartości z typem odniesienia. Podstawowa różnica między Boxingiem a Unboxingiem polega na tym, że Boxing to konwersja typu wartości na typ obiektu, podczas gdy z drugiej strony, termin Unboxing odnosi się do konwersji typu obiektu na typ wartości. Przeanalizujmy inne różnice między Boxingiem a Unboxingiem.

  1. Wykres porównania
  2. Definicja
  3. Kluczowe różnice
  4. Wniosek

Wykres porównania

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


Definicja boksu

Boks to procedura konwersji typu wartości na typ obiektu. Tutaj 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 Boks z przykładem.

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 liczby całkowitej

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 również wartość 24, a „typ obiektu ob” również zawiera wartość 24, ale obie wartości są od siebie niezależne, tzn. Jeśli zmienisz wartość i, nie będzie odzwierciedlała zmiany w wartość ob.


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

Definicja rozpakowania

Rewers boksu to Unboxing. Rozpakowanie to konwersja typu obiektu na typ wartości. Podczas rozpakowywania wartość typu obiektu w pudełku przechowywanego na stercie jest przenoszona na typ wartości przechowywany na stosie. W przeciwieństwie do boksu, rozpakowywanie musi być wykonane jawnie. Typ obiektu jest jawnie rzutowany na typ wartości, a typ wartości musi być taki sam jak wartość, do której odnosi się typ obiektu. Przyjrzyjmy się koncepcji rozpakowywania na przykładzie.

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

Wartość przechowywana w obiekcie ob jest pobierana przez rzutowanie na typ taki sam, jak obiekt, do którego odnosi się, tj. Liczba całkowita „j”.

Rozpakowywanie zajmuje również więcej pamięci i więcej czasu. Ponieważ, gdy typ obiektu musi zostać rozpakowany, wartość typu obiektu przechowywanego 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ępny do odśmiecania.

  1. W boksie obiekt jest nazywany typem wartości. Z drugiej strony proces odzyskiwania wartości z obiektu w ramce nazywa się rozpakowywaniem.
  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 stosu jest kopiowany do typu wartości przechowywanego w pamięci stosu.
  3. Boks to konwersja niejawna, natomiast unboxing to konwersja jawna.

Wniosek:

Zarówno boksowanie, jak i rozpakowywanie pochłaniają więcej czasu i pamięci oraz są kosztowne obliczeniowo. Brakuje również bezpieczeństwa typu i zwiększa koszty działania. Zawsze zaleca się unikanie nadmiernego korzystania z boksowania i rozpakowywania w programie.