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; // Тағйир медиҳад класи асосӣ
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 (чунки танҳо нусха тағйир ёфт)