record
النوع القياسي record record
record معدِّل يُضاف لـ class أو struct يمنحك مساواة قيمة وToString جاهزًا ونسخًا غير مدمّر تلقائيًا — مثالي لأنواع تخزّن بيانات بشكل أساسي.
الصياغة الموقعيّة `record Person(string First, string Last);` تولّد المُنشئ والخصائص في سطر واحد. الخصائص في record class تكون init-only افتراضيًا (غير قابلة للتعديل بعد الإنشاء).
يقارن record كل خاصية بدل مقارنة المرجع كما في class عادي، ويوفّر تعبير with لإنشاء نسخة معدَّلة دون تغيير الأصل.
الصياغة
public record TypeName(Type Prop1, Type Prop2);
📄 مثال
public record Person(string FirstName, string LastName);
var p1 = new Person("سارة", "أحمد");
var p2 = new Person("سارة", "أحمد");
Console.WriteLine(p1 == p2); // True — مساواة قيمة
var p3 = p1 with { LastName = "سالم" };
Console.WriteLine(p3); // Person { FirstName = سارة, LastName = سالم }أهم النقاط
| العنصر | الوظيفة |
|---|---|
| record class | الافتراضي — مرجعي، خصائصه init-only |
| record struct | قيمي، خصائصه قابلة للتعديل ما لم تُضِف readonly |
| with { ... } | ينسخ الكائن مع تعديل خصائص محدّدة |
💡 نصائح عملية
- استخدم record عندما تكون مهمّة النوع تخزين بيانات مقارنة بقيمتها، لا سلوكًا معقّدًا
⚠️ أخطاء شائعة
- استخدام record لكائنات Entity Framework التي تعتمد على مساواة المرجع لتتبّع الكائنات
خصائص ذات صلة
🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار CSHARP الكامل بالعربي.