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
nullstandart 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)