الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

المميزات الجديدة في لغة dynamic keyword – C# 4.0 الجزء الثاني

بدأه Xhack في 9 مايو 2010 · 3 رد · 925 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

سوف اكمل في هذه المقالة الحديث عن (dynamic Keyword) والتي قمت بتعريفها سابقا في الجزء الاول فلنبدء على بركة الله بشرح القيمة الحقيقة وراء هذه الاضافة الجديدة .

لنفرض مثلا ان لديك دالة (Method) إسمها GetCalculatorهذه الدالة تقوم بارجاع فصيلة (Class) من نوع حاسبة (Calculator) تحتوي على دالة إسمها (Add) هذه الدالة تقوم بارجاع الناتج من جمع رقمين كالتالي

	Calculator calc = GetCalculator();
	int sum = calc.Add(10, 20);

طبعا المثال السابق بسيط جدا ولكن لنفترض الان ان الدالة (GetCalculator) تقوم بارجاع نوع غير معروف بالنسبة اليك او ان المترجم (Compiler) لايستطيع التعرف على النوع الحقيقي فمالذي يمكن فعله في هذه الحالة ؟

طبعا الجواب بسيط وهو باستخدام دوال الانعكاس (Reflections) كما هو موضح في

المثال التالي

	object calc = GetCalculator();
	Type calcType = calc.GetType();
	object res = calcType.InvokeMember("Add", BindingFlags.InvokeMethod, null,calc, new object[] { 10, 20 });
	int sum = Convert.ToInt32(res);

ملاحظة: هذه الاشياء تواجهك اذا كانت تتعامل مع مكتبات (COM).

من المثال السابق يتضح لنا مدى صعوبة التعامل مع دوال الانعكاس وصعوبة قراءة الشفرات المكتوبة.

الكلام جميل ولكن ماعلاقة كل ماسبق ذكره بكلمة ديناميك (dynamic keyword)

حسنا انظر معي الى المثال التالي وكيف يمكن إعادة ماكتبناه في السابق مرة أخرى باستخدام dynamic keyword

	dynamic calc = GetCalculator();
	int sum = calc.Add(10, 20);

كما ترى في المثال السابق قمنا بنفس العمل الذي قمنا به باستخدام دوال الانعكاس

ولكن هذه المرة باستخدام (dynamic keyword) وكما ترى فانها تشبه لحد كبير المثال الاول ولكن الفرق اننا قمنا فط بوضع كلمة (dynamic) كنوع للمتغير.

dynamic-keyword-i1.png

كما هو موضح في الاعلى فإن التعرف على العملية سوف يتم وقت التنفيذ (Runtime)

اتمنى مما قدمته حتى الان ان تكون الصورة واضحة اليك .تخيل معي الان أنك تريد انشاء فصيلة (Class) وتريد إضافة حقول اليها ولكن وقت التنفيذ ؟؟؟

طبعا يمكنك فعل ذلك الان وبكل بساطة إنظر الى المثال التالي

	dynamic contact = new ExpandoObject();
	contact.Name = "Ahmed Naji";
	contact.WebSite="www.dotnetfinder.wordpress.com";
	Salary=1000;
	Console.WritLine(contact.Name);
	Console.WriteLine(contact.WebSite);

طبعا الغرض من هذه الإضافة حقا هو السهولة والبساطة في كتابة الشفرات وإعطاء قابلية كبيرة بأن تكون شفراتك أكثر مرونة.

والان سوف اتحدث عن جانب اخر مهم جدا جدا .لنفترض ان لدينا شفرة (Code) مكتوب بلغة من اللغات الديناميكة وأن هذه اللغة هي (IronPython) كما هو موضح بالأسفل

dynamic-python-i2.png

واننا نريد ان نستدعى الدالة (function) الموجودة في كود (IronPython) من خلال لغة سي شارب .هل هذا ممكن؟

والاجابة ايضا بسيطة وهي باستخدام (dynamic keyword) إنظر الى المثال التالي

dynamic-python-in-c.png

مدهش بلا شك لقد قمنا بتنفيذ كود مكتوب بلفة (IronPython) داخل لغة سي شارب بكل يسر وسهولة .والان سوف ياتي سؤال مهم جدا كيف تم تنفيذ شفرة مكتوبة بلغة (IronPython) داخل شفرة مكتوبة بلغة سي شارب ؟؟؟

لكي إجيبكم على هذا السؤال أنظروا الى الصورة بالاسفل.

dynamic-with-dlr.png

كما ترى في المثال السابق فان اللغات مسبقة التعريف (Statically_Typed) تتخاطب مباشرة مع لغة التنفيذ المشتركة (CLR) ولكن الحال مختلف مع اللغات الديناميكية مثل (IronPython) فيوجد هنالك لغة التنفيذ الديناميكية (DLR) والتي تقوم بدورها بالتخاطب مع (CLR) ونفس الشيء ينطبق عندما تقوم بتنفيذ شفرات مكتوب بلغات ديناميكية داخل لغة سي شارب .

وكما ترى مماسبق فان لغة التنفيذ الديناميكية(DLR) تلعب هنا دور الوسيط بين لغة التنفيذ المشتركة (CLR) وبين اللغات الديناميكة من جهة وبين لغة السي شارب واللغات الديناميكية من جهة أخرى.

طبعا هنالك حالات اخرى فيمكن ان تقوم بتنفيذ ملف مكتوب بلغة الجافا سكريبت (JavaScript) داخل تطبيقات سيلفر لايت (Silverlight).

الرؤية التي تطمح اليه مايكروسوفت

قد يسئل البعض مالغرض الاساسي والرؤية التي تريدها شركة مايكروسوفت .

اولا قابلية التعدد

فيمكن ان يكون في المشروع الواحد مبرمجين بلغة السي شارب ومبرمجين بلغة (IronPython) ومبرمجين جافا سكريبت (JavaScript)

ثانيا جذب أنظار المبرمجين والمطورين من لغات مختلفة نحو منصة عمل دوت نت (.Net Framework) واستخدام المنتجات المختلفة مثل Visual Studio

ثالثا السهولة في التعامل مع مكتبات (Com) وخاصة المتعلقة بتطبيقات أوفيس

س/ هل معنى هذا الكلام ان لغة سي شارب سوف تصبح لغة ديناميكية؟؟؟

طبعا لا فالغة سي شارب لغة مسبقة التعاريف ولكن ان تسلك سلوك اللغات الديناميكية فهذا من أجل تسهيل العمليات ولجعل الامور اسهل فكما راينا الفرق الواضح عند استخدام دوال الانعكاس وعند استخدام (dynamic keyword).وايضا سهولة تنفيذ شفرات اخرى من لغات ديناميكية داخل لغة سي شارب.

ملاحظة هذا الموضوع قد قمت بكتابته في مدونتي مستكشف الدوت نت ويمكن الرجوع إليه في إي وقت والسبب أن المواضيع في المنتدى بعد فترة وجيزة وبناء على المشاركات سوف تذهب الى الصفحات الثانية والثالثة وهكذا

الخلاصة

أتمنى من جميع مماسبق من شرح في الجزء الأول والثاني أن كون قد أعطيتكم لمحة كافية عن الميزة الهامة جدا في لغة السي شارب وكيف يمكن كتابتها وكيف يمكن إستخدامها وكيف يمكن تنفيذ لغات ديناميكية من داخل لغة سي شارب والفرق عند إستخدام دوال الإنعكاس واستخدام كلمة ديناميك والأهداف التي تسعى اليها شركة مايكروسوفت .

والله أعلم

تم تعديل هذه المشاركة بواسطة Xhack في 9 مايو 2010 في 10:08

1
#2

جزاك الله خيرا أخى

There is a version of the DLR that is open source and resides on the CodePlex web site. This

same version is included with the .NET 4 Framework, with some additional support for language

implementers

http://dlr.codeplex.com/

 وممّا زادنـــي شرفــاً وتيهــاً   **  وكدت بأخمصي أطأ الثريّا

دخولي تحت قولك يا عبادي  **   وأن صيّرت أحمد لي نبيّـاً

#3

زادك الله علماً

#4

وزادكم علما إن شاء الله

مواضيع مشابهة