Junior
C#-də siniflər və strukturlar arasındakı fərq nədir?
sobes.tech Süni İntellekt
AI-dan cavab
Sınıflar referans tipləridir, strukturlar isə dəyər tipləridir.
- Yaddaşda yerləşmə: Sınıf nümunələri idarə olunan yığında (Heap), strukturlar yığında (Stack) və ya aid olduqları obyektin içində yerləşir.
- İrsi: Sınıflar irsi dəstəkləyir, strukturlar dəstəkləmir. Strukturlar interfeysləri həyata keçirə bilər.
- Əsas dəyər: Sınıflar üçün
nulləsas dəyərdir. Strukturlar üçün sahələr üçün sıfırların toplusudur. - Metodlara ötürülmə: Sınıf nümunələri referansla (obyektə referans ötürülür). Strukturlar dəyər ilə (kopya yaradılır) ötürülür.
- Performans: Kiçik obyektlər üçün strukturlar sınıflardan daha sürətli ola bilər, çünki yığın idarəetmə və tullantı toplanması xərclərindən qaçınır. Ancaq, böyük strukturların dəyər ilə ötürülməsi daha az effektiv ola bilər.
- Yaradıcılıq: Strukturlar üçün, qeyri-parametrli konstruktor sahələri sıfırla başlatır. Sınıflar üçün, digər konstruktorlar təyin olunubsa, açıq parametrsiz konstruktor tələb olunur.
| Xüsusiyyət | Sinif (Class) | Struktur (Struct) |
|---|---|---|
| Növ | Referans növü | Dəyər növü |
| Yaddaşda yerləşmə | İdarə olunan yığın | Yığın / Daxili |
| İrsiyyət | Dəstəkləyir | Dəstəkləmir (amma interfeysləri həyata keçirir) |
| Əsas dəyər | null |
Sıfırların toplusu |
| Keçirmə | Referansla | Dəyər ilə |
| Performans | Kiçik obyektlər üçün daha yavaş ola bilər | Kiçik obyektlər üçün daha sürətli ola bilər |
| Qeyri-parametrli konstruktor | Yox (əgər başqa mövcuddursa) | Bəli (sıfırla başlatma) |
// Nümunə sinif
public class PointClass
{
public int X { get; set; }
public int Y { get; set; }
public PointClass(int x, int y)
{
X = x;
Y = y;
}
}
// Nümunə struktur
public struct PointStruct
{
public int X { get; set; }
public int Y { get; set; }
public PointStruct(int x, int y)
{
X = x;
Y = y;
}
}
// Keçirmə nümayişi
public void ModifyPoint(PointClass pc, PointStruct ps)
{
pc.X = 100; // Orijinal PointClass dəyişəcək
ps.X = 100; // Yalnız nüsxə PointStruct dəyişəcək
}
// İstifadə
var pointClass1 = new PointClass(1, 2);
var pointStruct1 = new PointStruct(1, 2);
ModifyPoint(pointClass1, pointStruct1);
// pointClass1.X 100 olacaq
// pointStruct1.X 1 olacaq (yalnız nüsxə dəyişdirildiği üçün)