Sobes.tech
Junior

C# da sinflar va tuzilmalar o'rtasidagi farq nima?

sobes.tech AI

AIdan javob

Sınıflar referans tipleri, strukturlar qiymat tipleridir.

  • Xotira joylashuvi: Sınıf nusxalari boshqariladigan yilda (Heap), strukturlar stackda (Stack) yoki ular tegishli bo'lgan ob'ekt ichida joylashadi.
  • Merosi: Sınıflar meros olishi mumkin, strukturlar qilmaydi. Strukturlar interfeyslarni amalga oshirishi mumkin.
  • Standart qiymat: Sınıflar uchun null standart qiymat hisoblanadi. Strukturlar uchun maydonlar uchun nol to'plami.
  • Metodlarga uzatish: Sınıf nusxalari referens bilan uzatiladi (ob'ektga referens uzatiladi). Strukturlar qiymat bilan uzatiladi (nusxa yaratiladi).
  • Ishlash tezligi: Kichik ob'ektlar uchun strukturlar sınıflardan tezroq bo'lishi mumkin, chunki yilda boshqarish va axlat yig'ish xarajatlaridan qochiladi. Biroq, katta strukturlarni qiymat bilan uzatish kamroq samarali bo'lishi mumkin.
  • Yaratish: Strukturlar uchun, no-parameterli shartli konstruktor maydonlarni nol bilan boshlaydi. Sınıflar uchun, agar boshqa konstruktorlar belgilangan bo'lsa, ochiq shartli konstruktor talab qilinadi.
Xususiyat Sınıf (Class) Struktur (Struct)
Tip Referens tipi Qiymat tipi
Xotira joylashuvi Boshqariladigan yilda Stack / Ichki
Meros Qo'llab-quvvatlaydi Qo'llab-quvvatlamaydi (lekin interfeyslarni amalga oshiradi)
Standart qiymat null Nol to'plami
Uzatish Referens bilan Qiymat bilan
Ishlash tezligi Kichik ob'ektlar uchun sekinroq bo'lishi mumkin Kichik ob'ektlar uchun tezroq bo'lishi mumkin
Konstruktor (no-parameter) Yo'q (agar boshqa mavjud bo'lsa) Ha (nol bilan boshlash)
// Sınıf misoli
public class PointClass
{
    public int X { get; set; }
    public int Y { get; set; }

    public PointClass(int x, int y)
    {
        X = x;
        Y = y;
    }
}

// Struktur misoli
public struct PointStruct
{
    public int X { get; set; }
    public int Y { get; set; }

    public PointStruct(int x, int y)
    {
        X = x;
        Y = y;
    }
}

// Uzatish misoli
public void ModifyPoint(PointClass pc, PointStruct ps)
{
    pc.X = 100; // Asl PointClass o'zgartiradi
    ps.X = 100; // Faqat nusxa PointStruct o'zgartiradi
}

// Foydalanish
var pointClass1 = new PointClass(1, 2);
var pointStruct1 = new PointStruct(1, 2);

ModifyPoint(pointClass1, pointStruct1);

// pointClass1.X 100 bo'ladi
// pointStruct1.X 1 bo'ladi (faqat nusxa o'zgargani uchun)