الجديد في C# 4.0

Thursday, September 17, 2009 | Labels: | |


بسم الله الرحمن الرحيم .
السلام عليكم ورحمة الله وبركاته .

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

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

1- البارميترات الاختيارية Optional Parameters.
2- استخدام Dynamic - Dynamic Support
3- التعامل مع COM - COM interop.
4- Variance.


1- البارميترات الاختيارية Optional Parameters :

أخيراً في سي شارب ، أصبح بامكانك وضع قيم افتراضية للبارميترات بعد أن كانت هذه الخاصية متاحة فقط في vb.net :

public void functionname( string param1="Ahmed", bool param2 = false, int param3 = 24 ){
}

*** تسمية المتغيرات عند الإرسال Named Parameters :
في المثال السابق ، لنفترض اننا نريد الاستفادة من الخاصية الافتراضية للمتغير المنطقي param2 ولكننا نريد ارسال قيمة رقمية ل param3 بالشكل التالي
functionname("Ali",25);


الجملة السابقة للاسف خاطئة ، لإنها سترسل 25 في البارميتر الثاني وتفترض أن البارميتر الثالث هو من لم يتم تمريره .
لحل هذه المشكلة ، يمكننا كتابة اسم البارميتر حالة الإرسال بالشكل التالي :

functionname("Ali",param3: 25);


2- استخدام Dynamic - Dynamic Support

لنفترض أن لدينا دالة نرسل لها متغير معين فتعين لنا إما كائن من نوع طالب ، أو كائن من نوع مدرس ، بالشكل التالي مثلاً :

public object functionname(param a){if(a==0) return new Student();else return new teacher();}


الآن ، لو كان لهما خاصية مشتركة FirstName ونريد تعديلها بناء على الدالة التي تمت اعادتها ، فلدينا الحل التالي :
if(condition==0){Student s=functionname(condition) as Student;s.FirstName="Ahmed";}else{Teacher s=functionname(condition) as Teacher s.FirstName="Ahmed";}


الحل البديل الآن مع dynamic ، يمكنك كتابة الكود السابق بالشكل التالي :

dynamic s=functionname(condition) s.FirstName="Ahmed";


وفي حالة عدم وجود الخاصية بصورة مشتركة ، فسيتم رمي الاستثناء RuntimeBinderException
كما يمكنك لاحقاً اعادة تعيينها إلى Class معين بالشكل التالي :

Student newone=s;


*** أي قيمة byref عائدة من dynamic سيكون نوعها dynamic أيضاً .

3- التعامل مع COM - COM interop.

باستخدام نفس الميزة الجديدة dynamic ، اصبح التعامل مع ال COM Components أسهل وأسرع .
ابسط مثال على ال Com Components هي ادوات التعامل مع مجموعة برامج الاوفيس Ofice ، سابقاً كنا نكتب كود كالتالي للقراءة من خلية اكسل :
((Excel.Range)excel.Cells[1, 1]).Value2 = "Hello";

الجديد الآن ، هذا السطر كافي :

excel.Cells[1, 1].Value = "Hello";4- Variance


لو فرضنا أن لدينا الكود التالي :

IList strings = new List();IList<object> objects = strings;


في الواقع وعلى الرغم من ان أي String هو Object ، إلا أن الجملة السابقة ليست صحيحة بسبب أن String لا يحتوي على نفس عناصر ال Objects . مثال ذلك :

objects[0] = 5;string s = strings[0];


هذه الجملة خاطئة ، وادخالنا ل 5 كرقم واعادتها كنص يعد خرقاً لقواعد الأمان ، فقط باستخدامنا الانترفيس Interface التالي في C# 4.0 يمكن أن نمنع المستخدم من ادخال بيانات خاطئة :


IEnumerable<object> objects = strings;


والذي يتم تعريفه في C# 4.0 بالشكل التالي :


public interface IEnumerable : IEnumerable{ IEnumerator GetEnumerator();}public interface IEnumerator : IEnumerator{ bool MoveNext(); T Current { get; }}


أخيراً : العلاقة مع فيجوال بيسك - التحديثات الجديدة - :

1- خاصية القيم الافتراضية للبارميترات موجودة منذ زمن في الفيجوال بيسك .
2- بالنسبة لـ Variance و dynamic فتم تطبيقهم في نفس الوقت للغتين .

للاستزادة :
http://code.msdn.microsoft.com/Proje...ownloadId=3550

والسلام عليكم ورحمة الله وبركاته .

2 comments:

  1. Emad Alashi says:

    رائع جدا، هذا أول مقال أقرأه عن الجديد في c# 4.
    لكن ربما سيفيدك الرابط التالي لإظهار الشيفرة بشكل أفضل: http://copysourceashtml.codeplex.com/

  2. Ahmed Gamal says:

    شكراً لك على الاضافة ..