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

#️⃣ شرح C#

الجديد في C# 14 و.NET 10

الدرس 29 من 30· ⏱ 2 دقائق قراءة

.NET 10 وC# 14

.NET 10 هو الإصدار طويل الأمد (LTS) الحالي من منصّة .NET، ويأتي معه C# 14. هذا الدرس يغطّي أبرز إضافاته: كلمة field المفتاحية، وExtension Members، والإسناد الشرطي الفارغ.

الكلمة المفتاحية field

في الخصائص المخصّصة (غير التلقائية)، كنت بحاجة لتعريف حقل احتياطي خاص يدويًا فقط لإضافة منطق بسيط داخل set:

// الطريقة القديمة
private string _name;
public string Name
{
    get => _name;
    set => _name = value ?? throw new ArgumentNullException(nameof(value));
}

الآن يمكنك استخدام field للإشارة إلى الحقل الاحتياطي الذي يولّده المترجم تلقائيًا، دون تعريفه أنت:

// C# 14
public string Name
{
    get;
    set => field = value ?? throw new ArgumentNullException(nameof(value));
}

النتيجة نفسها بالضبط، لكن بلا حقل يدوي. يمكنك تخصيص get أو set أو كليهما، وترك الجزء الآخر تلقائيًا.

💡 إن كان لديك بالفعل متغيّر أو حقل باسم field في نفس الصنف، يجب تمييزه بـ this.field أو @field لتفادي الالتباس مع الكلمة المفتاحية الجديدة.

Extension Members — توسيع أنواع لا تملكها

سبق ورأيت دوال التوسيع (Extension Methods) في مسارات أخرى. C# 14 يوسّع الفكرة بصياغة extension الجديدة لتشمل خصائص التوسيع أيضًا، لا الدوال فقط:

static class CollectionExtensions
{
    extension<T>(IEnumerable<T> source)
    {
        public bool IsEmpty => !source.Any();
    }
}

List<int> numbers = [];
Console.WriteLine(numbers.IsEmpty);   // True — تُستخدم وكأنها خاصية أصلية

كتلة extension<T>(...) تجمع أعضاء التوسيع (خصائص ودوال) لنوع معيّن في مكان واحد، بدل تكرار this IEnumerable<T> source في توقيع كل دالة توسيع كما في الأسلوب القديم.

الإسناد الشرطي الفارغ (?.=)

العامل ?. الذي تعرفه للقراءة الآمنة، صار الآن مسموحًا به على يسار عملية الإسناد أيضًا:

// قبل C# 14
if (customer is not null)
{
    customer.LastOrderDate = DateTime.Now;
}

// C# 14
customer?.LastOrderDate = DateTime.Now;

الطرف الأيمن (DateTime.Now هنا) لا يُقيَّم أصلًا إن كان customer يساوي null — نفس منطق التقييم الكسول في ?. العادي. يعمل هذا مع عوامل الإسناد المركّب مثل += أيضًا، لكن ليس مع ++ أو --.

الميزةالمشكلة التي تحلّها
fieldحقل احتياطي يدوي فقط لمنطق بسيط في get/set
Extension propertiesخصائص توسيع، لا دوال توسيع فقط
?.=فحص null يدوي قبل كل إسناد لخاصية أو عنصر

💡 هذه الميزات تقلّل الشيفرة المتكرّرة (boilerplate) دون تغيير دلالة الكود — استخدمها تدريجيًا في كود جديد بدل إعادة كتابة كل شيء دفعة واحدة.

🎯 التالي: خلاصة مسار C#.

شرح الجديد في C# 14 و.NET 10 — C# بالعربي
الجديد في C# 14 و.NET 10C# بالعربي · The Code Fix

📚 لمزيد من التعمّق في C#، راجِع توثيق C# من Microsoft.

هل كان هذا الدرس مفيدًا؟