Junior
C# да класстар менен структуралардын айырмасы эмнеде?
sobes.tech AI
AIден жооп
Класстар шилтемелүү типтер, структуралар маанилүү типтер.
- Эстелүү жайгашкандык: Класстардын үлгүлөрү башкарылуучу чөлмөдө (Heap), структуралардын үлгүлөрү стекте (Stack) же объекттин ичинде жайгашат, ага тиешелүү.
- Мурассасийлик: Класстар мурас алат, структуралар - албайт. Структуралар интерфейстерди ишке ашыра алат.
- Дефолт мааниси: Класстар үчүн
nullмааниси дефолт болуп саналат. Структуралар үчүн - нөлдөрдүн топтому. - Методторго өткөрүү: Класстардын үлгүлөрү шилтемеге (объектке шилтеме) өткөрүлөт. Структуралар - мааниге (копия) өткөрүлөт.
- Иштөө ылдамдыгы: Кыска объекттер үчүн структуралар класстарга караганда тезирек болушу мүмкүн, анткени чөлмө башкаруу жана чогултуу чыгымдарын азайтат. Бирок, чоң структураларды мааниге өткөрүү натыйжалуу болбой калышы мүмкүн.
- Жасалгыс: Структуралар үчүн параметрсиз жасалгыс нөлдөр менен өркүндөтөт.
| Белги | Класс (Class) | Структура (Struct) |
|---|---|---|
| Тип | шилтемелүү | маанилүү |
| Жайгашкандык | Башкарылуучу чөлмө | Стек / Внутри |
| Мурассасийлик | Колдоо көрсөтөт | Колдоо көрсөтпөйт (бирок интерфейстерди ишке ашыра алат) |
| Дефолт мааниси | null |
нөлдөрдүн топтому |
| Өткөрүү | шилтемеге (ссылка) | мааниге (копия) |
| Иштөө ылдамдыгы | Кичинекей объекттер үчүн тезирек болушу мүмкүн | Кичинекей объекттер үчүн тезирек болушу мүмкүн |
| Параметрсиз жасалгыс | Жок (эгер башкасы аныкталган болсо) | Ооба (нөлдөр менен башталат) |
// Мисал класс
public class PointClass
{
public int X { get; set; }
public int Y { get; set; }
public PointClass(int x, int y)
{
X = x;
Y = y;
}
}
// Мисал структура
public struct PointStruct
{
public int X { get; set; }
public int Y { get; set; }
public PointStruct(int x, int y)
{
X = x;
Y = y;
}
}
// Өткөрүүнү көрсөтүү
public void ModifyPoint(PointClass pc, PointStruct ps)
{
pc.X = 100; // Негизги PointClass өзгөрөт
ps.X = 100; // Жай гана копия PointStruct өзгөрөт
}
// Колдонуу
var pointClass1 = new PointClass(1, 2);
var pointStruct1 = new PointStruct(1, 2);
ModifyPoint(pointClass1, pointStruct1);
// pointClass1.X 100 болот
// pointStruct1.X 1 болот (эч кандай өзгөртүү болбойт, анткени копия өзгөрдү)