Sobes.tech
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.Όνομα θα αλλάξει επίσης σε "Пётр"