DEV Community

Ozodbek
Ozodbek

Posted on

C# dasturlash tili | Record haqida

C# dasturlash tilida shunaqangi bir kalit so'z borki, u orqali siz data-centric ma'lumot tiplarini yarata olasiz. Uni nomi record. U qanday ishlaydi ? (degan savol tugilishi mumkin sizda). Hozir tushuntiraman.

record bu reference type hisoblanadi. Va u shunday yoziladi.

public record Agent(string Name, int age);
Enter fullscreen mode Exit fullscreen mode

yozilishi juda ham sodda, To'gri bunday tipni boshqa bir usul, ya'ni struct orqali yaratsa ham bo'ladi. Misol uchun:

public struct Agent ()
{
    public string Name { get; set; }
    public int Age { get; set; }
}
Enter fullscreen mode Exit fullscreen mode

manashu code. Tepadagi bilan bir xil. Endi tassavur qilib ko'ring qaysi biri yozishga osonroq. To'gri agar struct value type, bu record reference type ekanku, reference bo'lsa immutable ham bo'ladiku deyishingiz mumkin (xulosa qilishga shoshilmang).
Birgina kalit so'zni qo'shib record ni value type qilish mumkin.
Qanday ?
Mana:

public record struct Student (string Name, int Age);
Enter fullscreen mode Exit fullscreen mode

bo'ldi akala. Mana bittagina struct ni qo'shib ham value type qilsa bo'larkanu.

Hop endi Record haqida bafurcha gaplashib olamiz. Va yuqoridagi misol sifatida recordni yozilish syntaxni tushuntirishga harakat qilaman.

public record Agent(string Name, int age);
Enter fullscreen mode Exit fullscreen mode

public - bu acces modifier (ommaviy), yani boshqa classlarda ham chaqira olasiz. Buni xohlasangiz private qila olasiz.
record - bu kalit so'z doimo acces modifierdan keyin yoziladi(oldin emas!). Hozir asosiy urgu shu type haqida ketmoqda.
Agent - bu istalgancha Object yaratish uchun nom.
string Name, int age - bu parametrlar, istalgancha yozish imkoningiz bor.
Ichidagi parametrlar uchun compiler automatic ravishda init-only propertylar yaratib beradi!

Yana bir gap. record immutable dedik. Uni mutable qilish ham mumkin. (C# hammasini inobatga olganda ;) ).

Qanday ?
Student.cs

public record Point(int X, int Y);
Enter fullscreen mode Exit fullscreen mode

Program.cs

Point ball = new Poin();
ball.X = 10;
Enter fullscreen mode Exit fullscreen mode

Bu πŸ‘† immutable ekanligi sabab error beradi.

Mutable qilish uchun shu tepadagi gap. struct qo'shamiz xolos.

Agar yana immutable qilshni xohlasangizu, lekin value type bo'lsin desangiz.
Shunday qiling.

Student.cs

public readonly record struct Point(int X, int Y);
Enter fullscreen mode Exit fullscreen mode

Program.cs

Point ball = new Poin();
ball.X = 10;
Enter fullscreen mode Exit fullscreen mode

Ana eng oson va optimal variant. readonly qilamiz va shu o'rinda struct ham qo'shamiz codega.

O'zi aslida record shunday yozilishi kerak edi.

public record class Point(int X, int Y);
Enter fullscreen mode Exit fullscreen mode

Class nega qo'shildi desa...
Class qo'shilishi sabab odamlar recordni aslida value type deb o'ylamasliklar uchun. Yani class yozish shart emas. Barbir class yozilgandek qabul qiladi Compiler.

Tushuntira oldimmi ?

Top comments (0)