الجديد في C# 4.0
Thursday, September 17, 2009 | Labels: C# | |بسم الله الرحمن الرحيم .
السلام عليكم ورحمة الله وبركاته .
ما الجديد في 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 |
في الواقع وعلى الرغم من ان أي 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 |
أخيراً : العلاقة مع فيجوال بيسك - التحديثات الجديدة - :
1- خاصية القيم الافتراضية للبارميترات موجودة منذ زمن في الفيجوال بيسك .
2- بالنسبة لـ Variance و dynamic فتم تطبيقهم في نفس الوقت للغتين .
للاستزادة :
http://code.msdn.microsoft.com/Proje...ownloadId=3550
والسلام عليكم ورحمة الله وبركاته .
رائع جدا، هذا أول مقال أقرأه عن الجديد في c# 4.
لكن ربما سيفيدك الرابط التالي لإظهار الشيفرة بشكل أفضل: http://copysourceashtml.codeplex.com/
شكراً لك على الاضافة ..