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 |
| Μεταβίβαση/Ανάθεση | Αντίγραφο της τιμής | Αντίγραφο της αναφοράς |
| Κληρονομικότητα | Όχι | Ναι |
| Διαχείριση Μνήμης | Αυτόματη (στοίβα) | Συλλέκτης απορριμμάτων |