Sobes.tech
Junior

Ποια είναι η διαφορά μεταξύ τύπων αναφοράς και τύπων τιμής;

sobes.tech AI

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

Διαφορές στον τρόπο αποθήκευσης και μετάδοσης δεδομένων:

  • Τύποι Αξίας (Value Types):

    • Αποθηκεύονται άμεσα εκεί που δηλώνονται (στη στοίβα ή μέσα σε μια περίπτωση τύπου αξίας).
    • Κατά την ανάθεση ή τη μεταβίβαση με τιμή, δημιουργείται ένα αντίγραφο της τιμής.
    • Περιλαμβάνουν primitive τύπους (int, float, bool κ.λπ.), δομές (struct) και enumeration (enum).
    • Είναι sealed (σφραγισμένοι) και δεν μπορούν να κληρονομηθούν.
  • Τύποι Αναφοράς (Reference Types):

    • Αποθηκεύονται στο heap. Η μεταβλητή περιέχει όχι την τιμή, αλλά μια αναφορά στη διεύθυνση στο heap.
    • Κατά την ανάθεση ή τη μεταβίβαση με τιμή, αντιγράφεται μόνο η αναφορά, όχι το αντικείμενο.
    • Περιλαμβάνουν κλάσεις (class), διεπαφές (interface), delegates (delegate) και πίνακες (array).
    • Μπορούν να υποστηρίξουν κληρονομικότητα.
    • Ο συλλέκτης απορριμμάτων διαχειρίζεται την απελευθέρωση μνήμης για αντικείμενα αναφοράς που δεν έχουν ενεργές αναφορές.
// Παράδειγμα τύπου αξίας (struct)
struct Point
{
    public int X;
    public int Y;
}

// Παράδειγμα τύπου αναφοράς (class)
class Circle
{
    public int Radius;
}
Χαρακτηριστικό Τύποι Αξίας Τύποι Αναφοράς
Τοποθεσία Αποθήκευσης Στοίβα ή μέσα σε μια περίπτωση τύπου αξίας Heap
Μεταβίβαση/Ανάθεση Αντίγραφο της τιμής Αντίγραφο της αναφοράς
Κληρονομικότητα Όχι Ναι
Διαχείριση Μνήμης Αυτόματη (στοίβα) Συλλέκτης απορριμμάτων