الجمعة، 20 فبراير، 2009

نظرة عامة على بعض ميزات C# 3.5 الجديدة - 1

  1. نظرة عامة على بعض ميزات C# 3.5 الجديدة - 1
  2. المناهج الإضافية Extension Methods


المتحولات المحلية المعرفة ضمنياً Implicitly Typed Local Variables

عند التصريح عن المتحولات المعرفة ضمنياً فإن نوع المتحول المحلي يُستنتج من التعبير الذي استخدم لتهيئة قيمة المتحول, ويكون هذا عندما يتم استخدام النوع var كنوع للمتحول ولا يوجد نوع ضمن المجال الذي عُرف فيه المتحول له الاسم var, مثال:



var i = 5;
var s = "Hello";
var d = 1.0;
var numbers = new int[] { 1, 2, 3 };
var orders = new Dictionary();


التصريح الضمني عن المتحولات أعلاه يطابق تماماً التصريح عن المتحولات بشكل مباشر:


int i = 5;
string s = "Hello";
double d = 1.0;
int[] numbers = new int[] { 1, 2, 3 };
Dictionary orders = new Dictionary();



طبعاً مع الأخذ بالاعتبار بأن التصريح الضمني عن المتحولات يخضع للقيود التالية:


  • التصريح يجب أن يتضمن عملية تهيئة للمتحول المصرح عنه

  • تهيئة المتحول يجب أن تتم باستخدام تعبير Expression

  • التعبير المُستخدم لتهيئة المتحول يجب أن تكون نتيجته نوع في زمن الترجمة compile-time type ولا يمكن أن تكون قيمة التعبير null

  • لا يمكن التصريح عن متحول ضمني لأكثر من مرة واحدة

  • التعبير المُستخدم لتهيئة المتحول لا يمكن أن يحتوي على مرجع للمتحول نفسه



الأمثلة التالية تعبر عن عمليات تصريح عن متحولات ضمنية غير صحيحة:


var x; // Error, no initializer to infer type from
var y = { 1, 2, 3 }; // Error, collection initializer not permitted
var z = null; // Error, null type not permitted
var u = x => x + 1; // Error, lambda expressions do not have a type
var v = v++; // Error, initializer cannot refer to variable itself



في حال استخدام النوع var للتصريح عن متحول ضمني ويوجد نوع class, structure … اسمه var في نفس المجال عندها يتم استخدام النوع var الثاني. وبما أن طريقة التصريح عن أسماء الأنواع يبدأ بحرف كبير فغالباً لن يصدف وجود مثل هذه الحالة.


استخدام for-initializer لعبارة for و resource-acquisition لعبارة using يعتبر تصريحاً ضمنياً عن المتحولات, وأيضاً المتحول الذي يستخدم في عبارة foreach, في
هذه الحالة فإن نوع المتحول يكون نفس نوع عناصر المجموعة التي يتم سردها باستخدام حلقة foreach:


int[] numbers = { 1, 3, 5, 7, 9 };
foreach (var n in numbers)
{
Console.WriteLine(n);
}


نوع المتحول n هو int وهو نفس نوع عناصر المصفوفة numbers.


مترجم بتصرف عن مقالة من موقع http://www.microsoft.com

هناك تعليق واحد: