Sobes.tech
Junior

C#-da istinad növləri (Reference Type) və dəyər növləri (Value Type) arasındakı fərq nədir?

sobes.tech Süni İntellekt

AI-dan cavab

İstinad tipləri, məlumatların yerləşdiyi yaddaş ünvanını saxlayır. Dəyər tipləri isə, məlumatları birbaşa dəyişəndə saxlayır.

İstinad tipləri:

  • System.Object-dən irsən alır.
  • Yığma (heap) yaddaşında yerləşir.
  • Bir istinad tipli dəyişəni digərinə təyin etdikdə, məlumatların özləri deyil, referans kopyalanır.
  • Standart olaraq, null ilə başlanır.
  • Siniflər (class), interfeyslər (interface), delegatlar (delegate), massivlər (array), sətirlər (string) daxildir.

Dəyər tipləri:

  • System.ValueType-dən irsən alır (bu da System.Object-dən irsən alır).
  • Yığımda (stack) və ya referans tiplərinin sahəsi olduqda obyekt daxilində yerləşir.
  • Bir dəyər tipi dəyişəni digərinə təyin etdikdə, məlumatlar özləri kopyalanır.
  • Standart olaraq, sıfır dəyəri ilə (0 ədədlər üçün, false bool üçün, boş struktur üçün) başlanır.
  • Struktur (struct), enum (enum), daxili məlumat tipləri (int, float, bool və s.) daxildir.

Nümunə:

// İstinad tipi
public class MyClass
{
    public int Value;
}

// Dəyər tipi
public struct MyStruct
{
    public int Value;
}

// İstifadə
MyClass obj1 = new MyClass { Value = 10 };
MyClass obj2 = obj1; // hər ikisi eyni obyektə istinad edir
obj2.Value = 20; // dəyişiklik, obj1-ə təsir edir
Console.WriteLine(obj1.Value); // 20 göstərəcək

MyStruct s1 = new MyStruct { Value = 10 };
MyStruct s2 = s1; // məlumatlar kopyalanır, s2 müstəqil nüsxədir
s2.Value = 20; // dəyişiklik, s1-ə təsir etmir
Console.WriteLine(s1.Value); // 10 göstərəcək