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);
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; }
}
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);
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);
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);
Program.cs
Point ball = new Poin();
ball.X = 10;
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);
Program.cs
Point ball = new Poin();
ball.X = 10;
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);
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)