تخطَّ إلى المحتوى

Primary Constructor

المُنشئ الأساسي (Primary Constructor) Primary Constructor

منذ C# 12، يمكن كتابة مُنشئ مباشرة بجانب اسم أي class أو struct، لا الـ record فقط، ومعاملاته متاحة في كل جسم الصنف.

الصياغة `class Name(params)` تجعل معاملات المُنشئ في نطاق الصنف بأكمله — يمكن استخدامها مباشرة داخل تعريف خاصية أو دالة، لا داخل جسم المُنشئ فقط. كانت هذه الصياغة حصرًا على record منذ C# 9، وصارت الآن متاحة لأي class أو struct.

خلافًا للـ record، الصنف العادي مع Primary Constructor لا يولّد خصائص عامّة تلقائيًا من معاملاته؛ عليك تعريف الخاصية صراحة إن أردت تعريضها للخارج. أي مُنشئ إضافي يجب أن يستدعي المُنشئ الأساسي عبر this(...) لضمان تهيئة كل معاملاته.

الصياغة

class TypeName(Type param1, Type param2)
{
    // ...
}

📄 مثال

class Car(string brand, int speed)
{
    public string Brand { get; } = brand;
    public int Speed { get; } = speed;
}

var c = new Car("تويوتا", 120);
Console.WriteLine(c.Brand);   // تويوتا

أهم النقاط

العنصرالوظيفة
class Name(params)مُنشئ مدمج في تعريف الصنف أو struct
نطاق المعاملاتمتاحة في كل جسم الصنف، لا المُنشئ فقط
بلا خصائص تلقائيةclass/struct عادي لا يولّد خصائص من المعاملات تلقائيًا (بخلاف record)

💡 نصائح عملية

  • استخدمها لتقليل الشيفرة المتكرّرة في أصناف بسيطة تُهيَّأ من معاملات قليلة

⚠️ أخطاء شائعة

  • توقّع أن الصنف العادي يولّد خصائص عامّة من معاملات المُنشئ الأساسي تلقائيًا كما في record — هذا غير صحيح

خصائص ذات صلة

🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار CSHARP الكامل بالعربي.