أحياناً كثيرة نستخدم كوداً لم نطوره شخصياً. هذه سنة الحياة بالنسبة للمبرمجين. وأحياناً كثيرة يكون هذا الكود داخل DLL. أي بمعنى آخر، لا نستطيع التعديل عليه. وهذا لا بأس به في معظم الأحيان حينما يكون هذا الكود يناسب احتياجاتنا. ولكن سنة أخرى من سنن حياة المبرمجين هو أنه هناك دائماً حالات فردية واستثنائية.
قبل فترة كنت أعمل على تعديل تطبيق طوره فريق آخر (في دولة أخرى!) وأضيف بعض الخصائص الجديدة عليه. وكانت طبقة التواصل مع قاعدة البيانات Data Access Layer (أو DAL) مطورة باستخدام أداة غير مجانية. هذا كان معناه أنه رغم أن الكود المصدري لهذه الجزئية كان موجوداً، لم يكن بمقدوري التعديل عليه وعمل كومبايل دون أن نشتري هذه الأداة. وهذه لم تكن مشكلة، حيث أن جميع الإجراءات التي أحناجها موجودة.
أحدها كان الإجراء GetAllReports التابع للكلاس ReportDAL والذي يعطيني جميع التقارير قي سنة معينة. المشكلة كانت تكمن في أن هناك عملية تتكرر كثيراً وهي تصفية الناتح كثر بنوع التقرير. العملية ليست صعبة. سطرين أو ثلاثة باستخدام Linq كان كفيلاً بهذا. ولكن هذا الكود بدأ يتكرر بكثرة في أنحاء البرنامج، لذا أصبح من اللازم أن يصبح هذا الكود الجديد هو الآخر جزئاً من الـDAL. ولكن الكود لا يمكن تعديله (دون دفع نقود).
الحل الكلاسيكي كان أن نطور كلاي جديد يرث الـClass القديم ويضيف الدالة الجديدة. ولكن هذا مزعج حيث أنه علي تعديل البرنامج كله ليستخدم الكلاس الجديد. هنا تأتي فائدة الـExtension Methods.








