ما الجديد في C # 10؟

تم إصدار C # 10 في نوفمبر 2021 جنبًا إلى جنب مع Visual Studio 2022 و .NET 6. وهو يضيف العديد من الميزات الجديدة التي تجعل العمل معها أسهل وأكثر ملاءمة. إليك جولة حول بعض الإضافات الأكثر فائدة وكيف ستُحسِّن من سير عملك.

ما الجديد في C # 10؟ - %categories

مساحات أسماء نطاق الملف

فلنبدأ بواحد من أبسط التغييرات وربما الأكثر أهمية. يمكنك الآن تطبيق مساحة اسم على ملف كامل عبر خيار بناء جملة جديد للكلمة الأساسية لمساحة الاسم. سيتم وضع مساحة الاسم المتبقية تلقائيًا داخل الملف ، حتى إذا لم يتم وضع مسافة بادئة لها داخل كتلة مساحة الاسم. يعمل هذا بشكل مشابه لإعلانات مساحة الاسم في PHP.

في C # 9 ، كنت بحاجة إلى هذا الرمز إلى مساحة اسم فئة:

namespace Demo {
 
    public class Example {
    }
 
}

في C # 10 ، يمكنك استخدام ما يلي بدلاً من ذلك:

namespace Demo;
 
public class Example {
}

يوفر لك هذا بعض المساحة الأفقية في المحرر الخاص بك عن طريق الاستغناء عن مستوى المسافة البادئة. إذا احتاج الملف إلى احتواء فئات متعددة ، فيمكنك كتابتها جميعًا بدءًا من العمود صفر – ينطبق إعلان مساحة الاسم على الملف بأكمله.

الاستخدامات العالمية

يتم استخدام بعض مساحات الأسماء على نطاق واسع عبر المشاريع. ومع ذلك ، لا تزال بحاجة إلى تضمينها يدويًا في كل ملف باستخدام بيان استخدام.

يغير C # 10 هذا لدعم متغير عالمي باستخدام. سيؤدي ذلك إلى جعل مساحة الاسم المشار إليها قابلة للوصول عبر جميع الملفات في مشروعك.

global using System;

يمكن إضافة الاستخدامات العالمية إلى أي ملف سيتم تضمينه في التجميع الخاص بك. إنها تدعم جميع ميزات عبارات الاستخدام القياسية ، بما في ذلك الكلمة الأساسية الثابتة والاسم المستعار مع =.

اقرأ أيضا:  كيف تتحقق من تغطية 5G في منطقتك

سيؤدي اعتماد الاستخدامات العالمية إلى تقليل عدد الأسطر التي تكتبها ، ولكن لا يزال من الأفضل حجزها لمساحات الأسماء المُشار إليها بشكل شائع والتي توفر فرصة ضئيلة لتضارب التسمية. احذر من أن الاعتماد على استخدام عالمي يمكن أن يجعل شفرتك أكثر غموضًا ، حيث قد لا يدرك المساهمون الجدد على الفور كيف تم تضمين مورد ذي مساحة اسم.

الميزة المصاحبة للاستخدامات العالمية هي الاستخدامات الضمنية. يؤدي هذا تلقائيًا إلى إنشاء عبارات استخدام عامة مناسبة لنوع مشروعك. يتم تشغيل القدرة افتراضيًا في قوالب مشروع .NET 6. يمكن تعطيله باستخدام إعداد ImplicitUsings في ملف .csproj الخاص بك.

الهياكل المحسنة

تلقت الهياكل العديد من التحسينات التي تجعلها أقرب إلى التكافؤ مع الفئات. يتضمن ذلك المنشئات بدون معلمات ، ومُبدِّيات الحقل ، والدعم الكامل للتعبيرات ، وخيار إنشاء هياكل السجلات:

public record Point(int X, int Y);

ينشئ هذا المثال بنية تسجيلة “موضعية” حيث تصبح معلمات مُنشئ X و Y أعضاءً عموميين ضمنيين. يمكنك أيضًا تحديد الأعضاء يدويًا باستخدام البنية الحالية:

public record struct Point {
    public int X { get; init; }
    public int Y { get; init; }
}

يجب استخدام بنية السجل في السيناريوهات حيث تحتاج إلى تغليف بعض البيانات دون إرفاق سلوكيات مخصصة كطرق للفصل الدراسي. يوفر هيكل السجل اختبارات وميزات تكافؤ القيمة المتكاملة مثل ToString (). يمكن أن يكون إما قابل للتغيير أو غير قابل للتغيير عبر الكلمة الأساسية للقراءة فقط.

تحسينات تعبير Lambda

يضيف C # 10 العديد من التحسينات لتعبيرات lambda تغطي أنواعها وبناء الجملة. الهدف هو جعل لامدا أقرب إلى الأساليب العادية والوظائف المحلية. سيكون تحديد أحدها الآن تجربة مألوفة أكثر.

اقرأ أيضا:  ما المبلغ الذي يجب أن أنفقه على بطاقة الرسومات للألعاب؟

تم تقديم مفهوم النوع “الطبيعي“. يتيح ذلك للمترجم استنتاج نوع لامدا دون تحويله يدويًا إلى مفوض أو تعبير. يؤدي هذا إلى إنشاء كود أكثر قابلية للقراءة عند تخصيص لامدا لمتغير:

// C# 9
Func<string, int> toInt = (string s) => int.Parse(s);
 
// C# 10
var toInt = (string s) => int.Parse(s)

سوف يستنتج المترجم نوع toInt كـ Func <string، int> وسيتم عرض هذا عند عرض الكود في Visual Studio. ستستخدم الاستدلالات Func أو Action أو المفوضين المركبين.

ستعمل الأنواع الطبيعية فقط عندما يكون تعبير لامدا مكتوبًا بالكامل بالفعل. إذا حذفت أنواع المعلمات ، فلن يتمكن المترجم من إنشاء تعريف نوع متوافق.

التغيير ذو الصلة هو دعم أنواع الإرجاع الصريحة. كما هو الحال مع الوظيفة العادية ، يأتي نوع الإرجاع قبل قائمة معلمات lambda:

var toInt = int (string s) => int.Parse(s)

أخيرًا ، يمكن الآن أن تأخذ لامدا السمات بنفس طريقة الأساليب والوظائف. يتم وضعهم في بداية تعبير lambda ، قبل نوع الإرجاع وقائمة المعلمات. يمكنك استخدام السمات لإرفاق بيانات وصفية إضافية بأحرف لامدا الخاصة بك لتسهيل مزيد من الاستبطان وتحليل الكود.

var toInt = [DemoAttribute()] int (string s) => int.Parse(s)

مهام متعددة الاستخدامات ومفككة

يمكن الآن لتخصيصات التفكيك تهيئة المتغيرات الجديدة وتعيين القيم إلى المتغيرات الموجودة في نفس السطر. في السابق كنت بحاجة إلى استخدام عمليات تفكيك منفصلة لهذه العمليات.

في C # 9 ، نتج عن ذلك رمز يشبه هذا:

int x = 0;
int y = 0;
(x, y) = point;
 
(int z) = point;

بينما في C # 10 ، يمكنك القيام بذلك:

int x = 0;
int y = 0;
(x, y, int z) = point;

سيتم الآن تهيئة كل من x و y و z بقيم باستخدام مهمة التفكيك الفردية ، مما يقلل التكرار في الكود.

اقرأ أيضا:  تأثير الذكاء الاصطناعى: أهداف التنمية المستدامة

تغييرات أخرى

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

تم تبسيط أنماط الخصائص لتوفير وصول أكثر قابلية للقراءة إلى الخصائص المتداخلة. يمكنك الآن استخدام بناء جملة النقطة للوصول إلى قيم الخصائص المتداخلة ، بدلاً من طبقات متعددة من الأقواس:

// C# 9
{ Train: {ArrivalTime: "10:00"} }
 
// C# 10
{ Train.ArrivalTime: "10:00" }

في مكان آخر ، تعني تحسينات المترجم أنك ستستفيد من عدد أقل من الإيجابيات الخاطئة أثناء التعيين المحدد وفحوصات الحالة الخالية. تمت معالجة العديد من مشكلات C # 9 التي أدت إلى تحذيرات زائفة في وقت التجميع ، مما أدى إلى عمليات تحقق أكثر دقة تكون مجهزة بشكل أفضل لمساعدتك في تصحيح المشكلات المهمة بالفعل. ارتبطت المشكلات باستخدام تعبيرات الاندماج الصفرية والمقارنات المتغيرة مقابل الثوابت المنطقية.

الاستنتاج

يضيف C # 10 العديد من الإمكانات الجديدة التي ستساعد في جعل التطوير أكثر وضوحًا. ومع ذلك ، فقد تم إرجاع العديد من الميزات الجديدة الأخرى بما في ذلك الكلمة الأساسية للحقل والخصائص المطلوبة إلى الإصدار الرئيسي التالي. تم تحويل السمات العامة وأعضاء الملخصات الثابتة للواجهات إلى 10 ولكن مع استمرار إرفاق علامة المعاينة.

قد يعجبك ايضا