Junior — Middle
Ποια είναι η διαφορά μεταξύ των τύπων αναφοράς και των τύπων τιμής στη C# και ποιες είναι οι βασικές διαφορές στη χρήση τους;
sobes.tech AI
Απάντηση από AI
Στην C#, οι τύποι χωρίζονται σε τύπους τιμής (value types) και τύπους αναφοράς (reference types).
Οι τύποι τιμής αποθηκεύουν τα δεδομένα απευθείας. Παραδείγματα: int, double, struct. Κατά την ανάθεση ή την μεταβίβαση σε μια μέθοδο, αντιγράφεται η ίδια η τιμή, δηλαδή δημιουργείται ένα ανεξάρτητο αντίγραφο.
Οι τύποι αναφοράς αποθηκεύουν μια αναφορά σε ένα αντικείμενο στη μνήμη (στο σωρό). Παραδείγματα: class, string, πίνακες. Κατά την ανάθεση, αντιγράφεται μόνο η αναφορά, όχι το αντικείμενο, επομένως πολλές μεταβλητές μπορούν να αναφέρονται στο ίδιο αντικείμενο.
Βασικές διαφορές:
- Αποθήκευση: οι τύποι τιμής συνήθως βρίσκονται στη στοίβα, οι τύποι αναφοράς στον σωρό.
- Αντιγραφή: οι τύποι τιμής αντιγράφονται με την τιμή, οι τύποι αναφοράς με την αναφορά.
- Συμπεριφορά κατά την αλλαγή: η αλλαγή ενός τύπου τιμής δεν επηρεάζει άλλα αντίγραφα, η αλλαγή σε ένα αντικείμενο τύπου αναφοράς αντικατοπτρίζεται σε όλες τις αναφορές.
Παράδειγμα:
int a = 5;
int b = a; // αντίγραφο της τιμής
a = 10; // το a θα παραμείνει 5
class Άτομο { public string Όνομα; }
Άτομο p1 = new Άτομο { Όνομα = "Иван" };
Άτομο p2 = p1; // αντίγραφο της αναφοράς
p2.Όνομα = "Пётр"; // το p1.Όνομα θα αλλάξει επίσης σε "Пётр"