Sobes.tech
Junior — Middle

Εξηγήστε τις διαφορές μεταξύ των διαδικασιών ανάπτυξης και συσκευασίας αντικειμένων, καθώς και μεταξύ της μεταφοράς παραμέτρων μέσω αναφοράς και τιμής στο πλαίσιο εργασίας με τύπους αναφοράς και δομές.

sobes.tech AI

Απάντηση από AI

Στη C#:

Boxing (κουτίσμα) — η διαδικασία μετατροπής μιας τιμής τύπου (π.χ. δομής) σε ένα αντικείμενο τύπου αναφοράς (object). Αυτό δημιουργεί ένα αντίγραφο της τιμής στον σωρό.

Unboxing (απο-κουτίσμα) — η αντίστροφη διαδικασία, εξαγωγή της τιμής από το αντικείμενο πίσω στον τύπο τιμής.

Παράδειγμα:

int x = 123;          // τύπος τιμής
object o = x;         // κουτίσμα
int y = (int)o;       // απο-κουτίσμα

Μεταβίβαση παραμέτρων:

  • Ανά τιμή (προεπιλογή για τύπους τιμής): η τιμή αντιγράφεται, οι αλλαγές μέσα στη μέθοδο δεν επηρεάζουν το αρχικό.
  • Ανά αναφορά (ref, out): περνάει η αναφορά στη μεταβλητή, οι αλλαγές μέσα στη μέθοδο επηρεάζουν το αρχικό.

Για τύπους αναφοράς, περνάει ένα αντίγραφο της αναφοράς, αλλά όχι του αντικειμένου. Οι αλλαγές στα πεδία του αντικειμένου μέσα στη μέθοδο είναι ορατές από έξω, αλλά η επαναπροσδιορισμός της αναφοράς — όχι.

Συνοπτικά:

  • Κουτίσμα — περιτύλιγμα ενός τύπου τιμής σε ένα object.
  • Απο-κουτίσμα — εξαγωγή του τύπου τιμής από ένα object.
  • Μεταβίβαση ανά τιμή — αντίγραφο δεδομένων.
  • Μεταβίβαση ανά αναφορά — μεταβίβαση της αναφοράς στα δεδομένα.