14-10-12, 04:38 PM
كاتب الموضوع : أحمد جمال
بسم الله الرحمن الرحيم .السلام عليكم ورحمة الله وبركاته .
إذا كنت مبرمج C++ ، فأنت بالتأكيد تدرك معنى pointer ، أما لو لم تكن كذلك ، أما لو لم تكن كذلك فعليك ان تعرف انه بالاضافة إلى ال value type وال refernce type ، هناك ايضاً ال pointer type والتي تختص بالاشارة إلى اماكن معينة في الذاكرة .
بداية أول ما ستعرفه انك لن تتعامل معها في الكود الطبيعي ، بل ستضطر لاستخدام unsafe code لعمل ذلك حيث أن السي شارب لن تسمح لك افتراضياً بالتعامل مع ال pointers ، لذا قم اولاً بالسماح لنفسك باستخدامها بالشكل التالي :
والآن من خلال الكود الخاص بك يمكنك كتابة كود يتعامل مع ال pointers بالشكل التالي مثلاً :
كود :
class Program
{
static void Main(string[] args)
{
unsafe
{
// Work with pointer types here!
}
// Can't work with pointers here!
}
}
الآن سنتعرف على الأدوات الأساسية التي ستعيننا على التعامل مع ال 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 ، وأخبرني بالفارق ...
الآن سنعود مرة أخرى لنشرح من البداية ...