Junior
Каква е разликата между референтните и стойностните типове?
sobes.tech AI
Отговор от AI
Разликите в начина на съхранение и предаване на данни:
-
Типове стойност (Value Types):
- Се съхраняват директно там, където са обявени (на стека или вътре в екземпляр на тип стойност).
- При присвояване или предаване по стойност, се създава копие на стойността.
- Включват примитивни типове (int, float, bool и др.), структури (struct) и изброявания (enum).
- Са запечатани (sealed) и не могат да бъдат наследени.
-
Типове препратки (Reference Types):
- Се съхраняват в купчината. Променливата съдържа не стойността, а препратка към адрес в купчината.
- При присвояване или предаване по стойност, се копира само препратката, а не самият обект.
- Включват класове (class), интерфейси (interface), делегати (delegate) и масиви (array).
- Могат да поддържат наследяване.
- Събирачът на отпадъци управлява освобождаването на паметта за обекти от тип препратка, към които няма активни препратки.
// Пример за тип стойност (struct)
struct Point
{
public int X;
public int Y;
}
// Пример за тип препратка (class)
class Circle
{
public int Radius;
}
| Характеристика | Типове стойност | Типове препратка |
|---|---|---|
| Място на съхранение | Стек или вътре в екземпляр на тип стойност | Купчина |
| Предаване/Присвояване | Копие на стойността | Копие на препратката |
| Наследяване | Не | Да |
| Управление на паметта | Автоматично (стек) | Събирач на отпадъци |