المتحولات المحلية المعرفة ضمنياً 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
طبعاً مع الأخذ بالاعتبار بأن التصريح الضمني عن المتحولات يخضع للقيود التالية:
- التصريح يجب أن يتضمن عملية تهيئة للمتحول المصرح عنه
- تهيئة المتحول يجب أن تتم باستخدام تعبير 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
مشكوررررررررررررر
ردحذف