احدى الفوائد المهمة التي جاء بها نوع dynamic الجديد إلى الدوت نت هي امكانية التعامل بسهولة مع كائنات COM .
وحتى نفهم هذا الأمر فسننشأ صفحة اكسل في الC# ونضع قيمة للخلية A1 بالطريقة القديمة باستعمال COM IDispatch :
using Microsoft.Office.Interop.Excel;
...
public static void Main() {
Application excel = new Application();
excel.Visible = true;
excel.Workbooks.Add(Type.Missing);
((Range)excel.Cells[1, 1]).Value = "Text in cell A1"; // Put this string in cell A1
}لاحظ أن القيمة المرجعة من خلية excel.Cells[1, 1] هي من نوع object والتي يجب عمل cast لها لنوع Range قبل استعمال الproperty التي تسمى Value .
اما الان مع ظهور نوع dynamic الجديد اصبح اي استخدام للVARIANT في ميثود COM ما تحول لdynamic في اثناء عمل الاسمبلي للCOM في وقت التشغيل (وهذا ما يسمى بالdynamification) .
لذلك تصبح خلية excel.Cells[1, 1] من نوع dynamic وبالتالي لسنا بحاجة لعمل cast إلى نوع Range قبل استعمال الproperty التي تسمى Value .
using Microsoft.Office.Interop.Excel;
...
public static void Main() {
Application excel = new Application();
excel.Visible = true;
excel.Workbooks.Add(Type.Missing);
excel.Cells[1, 1].Value = "Text in cell A1"; // Put this string in cell A1
}باستعمال الdynamification اصبح التعامل مع كائنات COM اسهل بكثير من السابق .
لمعلومات اكثر عن هذا الأمر
http://blogs.msdn.com/b/samng/archive/2009/06/16/com-interop-in-c-4-0.aspx
عبد العظيم بخاري