Sobes.tech
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 (чунки танҳо нусха тағйир ёфт)