الدرس الرابع والأربعون - الـ Pointers - نسخة قابلة للطباعة +- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb) +-- قسم : الأقسام التعليمية - المنتدى القديم (http://vb4arb.com/vb/forumdisplay.php?fid=90) +--- قسم : قسم دورات المنتدى (http://vb4arb.com/vb/forumdisplay.php?fid=113) +---- قسم : دورة .net 2008 . لنبدأ سوياً (http://vb4arb.com/vb/forumdisplay.php?fid=138) +---- الموضوع : الدرس الرابع والأربعون - الـ Pointers (/showthread.php?tid=5638) |
الدرس الرابع والأربعون - الـ Pointers - RaggiTech - 14-10-12 كاتب الموضوع : أحمد جمال
بسم الله الرحمن الرحيم .السلام عليكم ورحمة الله وبركاته . إذا كنت مبرمج C++ ، فأنت بالتأكيد تدرك معنى pointer ، أما لو لم تكن كذلك ، أما لو لم تكن كذلك فعليك ان تعرف انه بالاضافة إلى ال value type وال refernce type ، هناك ايضاً ال pointer type والتي تختص بالاشارة إلى اماكن معينة في الذاكرة . بداية أول ما ستعرفه انك لن تتعامل معها في الكود الطبيعي ، بل ستضطر لاستخدام unsafe code لعمل ذلك حيث أن السي شارب لن تسمح لك افتراضياً بالتعامل مع ال pointers ، لذا قم اولاً بالسماح لنفسك باستخدامها بالشكل التالي : والآن من خلال الكود الخاص بك يمكنك كتابة كود يتعامل مع ال pointers بالشكل التالي مثلاً : كود : class Program الآن سنتعرف على الأدوات الأساسية التي ستعيننا على التعامل مع ال pointers قبل ان نغوص في الأمثلة : * تستخدم لتعريف pointer . & لمعرفة عنوان المتغير في الذاكرة . -> تستخدم للوصول إلى حقل ما داخل الفئة التي يشير إليها ال pointer . ++ ، -- ، + ، - ، == ، != وغيره من المعاملات قابلة للعمل مع ال pointers . مع استمرارنا في هذا الدرس سوف تكتشف ان التعامل مع ال unsafe code لن يكون بنفس سهولة العمل في safe code من خلال سي شارب العادية ، ولكن لماذا استخدم ال unsafe code ؟ - أغراض تعليمية . - استخدامك لبعض ال dll's او ال COM Components التي تعمل اصلاً من خلال pointers . - محاولة تحسين اداء وسرعة مهمة معينة من خلال الوصول المباشر للذاكرة ، في مشروع التخرج الخاص بنا وأثناء قراءة pixels صورة ما لعمل بعض عمليات Image Processing كان بامكاننا استخدام دوال GetPixel و SetPixel الخاص بالصور للقراءة والكتابة ، ولكنها كانت لتكون عملية طويلة جداً للمرور على ال pixels بهذه الطريقة ، الحل البديل كان باستخدام unsafe code والتعامل مع ال pointers مباشرة للمرور على ال pixels الخاصة بالصورة ، جرب مثلاً كود لطرح صورتين بالطريقة Getpixel و setpixel ، وبعد هذه الدرس جربها مرة أخرى باستخدامpointers ، وأخبرني بالفارق ... الآن سنعود مرة أخرى لنشرح من البداية ... الدرس الرابع والأربعون - الـ Pointers - RaggiTech - 14-10-12 يمكنك الآن تعريف pointer بالشكل التالي : كود : public Node* Left; كود : public unsafe struct Node كود : unsafe static void SquareIntPointer(int* myIntPointer) كود : SquareIntPointer(&myInt2); كود : n->Left=5; http://www.codeproject.com/KB/GDI-plus/ImageTraverser.aspx والله الموفق ... والسلام عليكم ورحمة الله وبركاته . |