سي شارب 2.0
تُقدّم لغة البرمجة C # العديد من الميزات الجديدة في الإصدار 2.0 (الموافق للإصدار الثالث من معيار ECMA-334 وإطار عمل .NET 2.0 ). وتشمل هذه الميزات ما يلي:
ميزات C# 2.0
فئة جزئية
تتيح الفئات الجزئية توزيع تنفيذ فئة ما على عدة ملفات، بحيث يحتوي كل ملف على عضو واحد أو أكثر من أعضاء الفئة. وتُعد هذه الميزة مفيدة بشكل أساسي عندما يتم إنشاء أجزاء من الفئة تلقائيًا. على سبيل المثال، يستخدم مصممو واجهات المستخدم الذين يقومون بتوليد التعليمات البرمجية هذه الميزة بكثرة في Visual Studio .
file1.cs:
public partial class MyClass { public void MyMethod1 () { // كود مكتوب يدويًا } }file2.cs:
public partial class MyClass { public void MyMethod2 () { // كود مُولّد تلقائيًا } }الأدوية الجنيسة
تُعدّ الأنواع العامة ، أو الأنواع المُعاملة، أو تعدد الأشكال المُعامل ، ميزةً من ميزات .NET 2.0 التي تدعمها لغتا C# وVisual Basic. على عكس قوالب C++، تُنشأ الأنواع المُعاملة في .NET أثناء وقت التشغيل وليس بواسطة المُصرّف؛ ولذلك يُمكن استخدامها عبر لغات برمجة مختلفة، بينما لا يُمكن ذلك مع قوالب C++. كما تدعم بعض الميزات التي لا تدعمها قوالب C++ مباشرةً، مثل قيود النوع على المعاملات العامة باستخدام الواجهات. من ناحية أخرى، لا تدعم C# المعاملات العامة غير النوعية. على عكس الأنواع العامة في Java، تستخدم الأنواع العامة في .NET التجسيد لجعل الأنواع المُعاملة كائنات من الدرجة الأولى في الآلة الافتراضية لواجهة سطر الأوامر ، مما يسمح بتحسينات وحفظ معلومات النوع. [ 1 ]
الفئات الثابتة
الفئات الثابتة هي فئات لا يمكن إنشاء مثيلات منها أو توريثها، ولا تسمح إلا بالأعضاء الثابتة. ويشبه الغرض منها الغرض من الوحدات النمطية في العديد من لغات البرمجة الإجرائية.
وظيفة المولد
سمح إطار عمل .NET 2.0 للغة C# بتقديم مُكرِّر يوفر وظائف توليد ، باستخدام yield returnبنية مشابهة لتلك الموجودة yieldفي بايثون . [ 2 ] مع هذا المُكرِّر yield return، تحتفظ الدالة تلقائيًا بحالتها أثناء التكرار.
// دالة تأخذ مُدخلًا قابلًا للتكرار ( ربما مصفوفة) // وتعيد جميع الأعداد الزوجية. public static IEnumerable <int> GetEven ( IEnumerable <int> numbers ) { foreach ( int i in numbers ) { if ( i % 2 == 0 ) yield return i ; } }يوجد أيضًا yield breakبيانٌ يُعيد التحكم بشكلٍ غير مشروط إلى مُستدعي المُكرِّر. ويوجد بيانٌ ضمني yield breakفي نهاية كل دالة مُولِّدة.
مندوبون مجهولون
كخطوة تمهيدية لوظائف لامدا التي تم تقديمها في C# 3.0، أضافت C# 2.0 المندوبين المجهولين. توفر هذه الوظائف وظائف مشابهة للإغلاق في C#. [ 3 ] يتمتع الكود الموجود داخل جسم المندوب المجهول بإمكانية الوصول الكامل للقراءة والكتابة إلى المتغيرات المحلية، ومعاملات الأساليب، وأعضاء الفئة ضمن نطاق المندوب، باستثناء outالمعاملات ref. على سبيل المثال:
دالة `SumOfArrayElements` تأخذ مصفوفة من الأعداد الصحيحة ` array` كمدخل ، وتعيد مجموع عناصر المصفوفة . تقوم الدالة بتكرار عناصر المصفوفة باستخدام الدالة `forEach` ، ثم تضيف العنصر ` x` إلى المصفوفة . تُرجع الدالة مجموع العناصر .بخلاف بعض تطبيقات الإغلاق، يتمتع كل مثيل من المندوب المجهول بإمكانية الوصول إلى نفس موقع الذاكرة النسبي لكل متغير مرتبط، بدلاً من الوصول إلى القيم الفعلية عند كل إنشاء. راجع مناقشة أكثر تفصيلاً لهذا الفرق.
تفويض التغاير والتغاير العكسي
التحويلات من مجموعات الأساليب إلى أنواع المندوبين تكون متغيرة ومتغيرة عكسياً في أنواع الإرجاع والمعاملات، على التوالي. [ 4 ]
يمكن ضبط إمكانية وصول مستخدمي العقار بشكل مستقل
مثال:
string status = string.Empty ;public string Status { get { return status ; } // يمكن لأي شخص الحصول على قيمة هذه الخاصية، protected set { status = value ; } // ولكن فقط الفئات المشتقة يمكنها تغييرها }أنواع القيم القابلة للتصفير
أنواع القيم القابلة للتصفير (يُشار إليها بعلامة استفهام، على سبيل المثال int? i = null;) تُضاف nullإلى مجموعة القيم المسموح بها لأي نوع قيمة. يوفر هذا تفاعلاً مُحسّناً مع قواعد بيانات SQL، التي يمكن أن تحتوي على أعمدة قابلة للتصفير من أنواع تُطابق أنواع البيانات الأولية في لغة C#: INTEGER NULLيُترجم نوع عمود SQL مباشرةً إلى نوع عمود في لغة C# int?.
شهدت أنواع القيم القابلة للتصفير تحسينًا في نهاية أغسطس 2005، قبيل الإطلاق الرسمي، لتحسين خصائص التغليف الخاصة بها : فالمتغير القابل للتصفير الذي يُسند إليه قيمة فارغة (null) لا يُعد في الواقع مرجعًا فارغًا، بل هو نسخة من النوع `null` struct Nullable<T>مع خاصية ` HasValuenull` تساوي `null` false. عند تغليفها، Nullableتُغلّف النسخة نفسها، وليس القيمة المخزنة فيها، وبالتالي يكون المرجع الناتج دائمًا غير فارغ، حتى بالنسبة للقيم الفارغة. يوضح الكود التالي الخلل الذي تم تصحيحه:
int? i = null ; object o = i ; if ( o == null ) System.Console.WriteLine ( " سلوك صحيح - إصدار وقت التشغيل من سبتمبر 2005 أو أحدث" ) ; else System.Console.WriteLine ( " سلوك غير صحيح - وقت تشغيل تجريبي (من قبل سبتمبر 2005) " ) ;عند نسخ القيم إلى الكائنات، تُعامل Nullableالقيم الفارغة والمراجع الفارغة على أنها متساوية. وقد أثار تأخر هذا الإصلاح بعض الجدل [ 5 ] ، لأنه تطلب تغييرات جوهرية في بيئة CLR، مما أثر ليس فقط على .NET 2، بل على جميع التقنيات التابعة (بما في ذلك C# وVB وSQL Server 2005 وVisual Studio 2005).
عامل دمج الصفر
??يُطلق على هذا المعامل اسم معامل دمج القيم الفارغة، ويُستخدم لتحديد قيمة افتراضية لأنواع القيم القابلة للتصفير، بالإضافة إلى أنواع المراجع. يُعيد هذا المعامل المعامل الأيسر إذا لم يكن فارغًا؛ وإلا فإنه يُعيد المعامل الأيمن. [ 6 ]
object nullObj = null ; object obj = new Object (); return nullObj ?? obj ; // تُرجع objيتمثل الاستخدام الأساسي لهذا المعامل في تعيين نوع قابل للتصفير إلى نوع غير قابل للتصفير باستخدام صيغة سهلة:
int? i = null ; int j = i ?? 0 ; // إذا لم تكن قيمة i فارغة، فقم بتهيئة j إلى i. وإلا (إذا كانت قيمة i فارغة)، فقم بتهيئة j إلى 0.مراجع
- ↑ "مقدمة إلى البرمجة العامة في لغة C#" . مايكروسوفت . يناير 2005. تم الاطلاع عليه في 18 يونيو 2009 .
- ↑ "yield" . مرجع لغة C# . مايكروسوفت . تم الاسترجاع في 26-04-2009 .
- ↑ "الأساليب المجهولة (C#)" . دليل برمجة C# . مايكروسوفت . تم الاطلاع عليه في 18 يونيو 2009 .
- ↑ "التغاير والتغاير العكسي في المندوبين (C#)" . دليل برمجة C# . مايكروسوفت . تم الاطلاع عليه في 18 يونيو 2009 .
- ↑ سوماسيجار (11 أغسطس 2005). "لم تعد القيم الفارغة مفقودة" . مدونة سوماسيجار . MSDN . تم الاطلاع عليه بتاريخ 5 نوفمبر 2008 .
- ↑ "عامل التشغيل ??" . مرجع لغة C# . مايكروسوفت . تم الاسترجاع في 23 نوفمبر 2008 .
- لغة البرمجة سي شارب
