|
اقسام على الموقع
دروس في أنظمة التشغيل | ماي سكيول - MySQL | لفيجوال بيسك - Visual Basic | المات لاب Matlab | اللينكس و اليونكس | الاسمبلي - ASSEMBLY | الاوتلوك - Outlook | البرمجة تحت اللنكس -Linux Programming | البرمجة تحت وندوز بواسطة دوال ال win API | البرمجة في بيئة الدوت نت .Net | التصمبم والرسوم | الدلفي - Delphi | الجافا - Java | السي - C | الصوت و الصورة | الوورد - Word | القسم العام للأوفيس | الكوبول - COBOL | control panel-ftp | اوراكل - Oracle | اكسل - Excel | تحميل الملفات | برامج متنوعة | برامج التصفح | برامج الحماية | برامج إنترنت | تعرّف على الويب | بوربوينت - Power Point | images | دروس : كمبيوتر وصيانة | دروس مجلة نيوك phpnuke | دروس مسنجر MSN - yahoo - Gmail | دروس منتديات vBulletin | دروس الجوالات والهواتف | دروس السي بنل cpanel | دروس اكسس access | دروس بيونت شوب برو - point shop pro | دروس برمجة php - mysql | دروس برامج منوعة software | دروس ثري دي ماكس 3D max | دروس تطوير المواقع والمنتديات | دروس جافا سكريبت JavaScript | دروس دريم ويفر DreamWeaver | دروس شبكات Networks | دروس سويش - swish | دروس فلاش - flash | دروس فلاش mx | دروس فى نظام الوندوز WINDOWS | دروس فىالباسكال - Pascal | دروس فيجوال بيسك Visual Basic | دروس فرونت بيج - frontpage | دروس فوتوشوب photoshop | دروس هكر hacker crack virus | سي ++ | سي شارب - #C | فيجوال سي ++ - ++ Visual C | قسم البرمجة العام | دروس فى لغة HTML
البحث في المواد
اكثر المحتويات زيارة
الدوال في الاكسل (6,416 مشاهده)
ربط قاعدة بيانات أكسس (MS Access) مع برنامج الفيجوال بيسك بطريقة(ODBC) (4,160 مشاهده) الدرس الثالث : بعض تطبيقات الدوال في اكسل (3,093 مشاهده) تعريف الاستعلام وطريقة عرضه في آكسس، أنواع الاستعلامات، نافذة تحديد الاستعلام! (2,417 مشاهده) الدرس الثاني: بعض الحيل لتسهيل برنامج اكسل (2,309 مشاهده) شرح طريقة استعمال الأوتلوك مع بريد الهوتميل (2,211 مشاهده) تغيير لغة واجهة التطبيق من عربي الى انجليزي وبالعكس لـ Windows-based applications (2,179 مشاهده) أنواع العلاقات وطريقة الربط بين الجداول. (1,947 مشاهده) مقدمة عامة حول الاكسل وحيل خاصة بالاكسل (1,759 مشاهده) أنشئ قاعدة بياناتك التي ستستند إليها في تعلم طريقة ربط الجداول والاستعلامات. (1,733 مشاهده) الدرس الأول : عمل شريحة في البوربوينت (1,585 مشاهده) دروس في الأوفيس الأكسس - Access0- (1,541 مشاهده) كيفية حل مشاكل الانترنت اكسبلور Internet Explorer (1,510 مشاهده) دورة الأكسس: الدرس السادس : منوعات في أكسيس . (1,471 مشاهده) اضافه صوت ونص لخلفيه في باور بوينت (1,366 مشاهده) شرح طريقة التجميع Grouping في برنامج الاكسل (1,329 مشاهده) دورة الأكسس: الدرس السادس : منوعات في أكسيس .0--- (1,298 مشاهده) التعرف على مكونات الكمبيوتر (1,293 مشاهده) برنامج Windows Movie Maker لتكوين أفلام (1,275 مشاهده) درس تعريب المجلة (1,249 مشاهده) كيف تجعل برنامجك أكثر تألقا وجمالا باستخدام أداة Active Skin (1,222 مشاهده) مقدمة في ربط قواعد البيانات داخل بيئة الـ .NET باستخدام الـ VB.NET (1,220 مشاهده) ما هو المات لاب MATLAB؟ (1,182 مشاهده) مقدمة عن لغة البيسك (1,135 مشاهده) الفيجوال بيسك - مقدمة (1,093 مشاهده)
جديد مواد مع عشوائي
التحويل التلقائي للحروف ل- ل- ه إلى اسم الجلالة0---- (803 مشاهده)
النسبة المئوية لا تظهر بالخط العربي & الشدة وألف المد في لفظ الجلالة0---النسبة المئوية لا تظهر بالخط العربي & الشدة وألف المد في لفظ الجلالة0--- (493 مشاهده) ضبط خيارات اللغة فى الـ Microsoft Word0--- (557 مشاهده) استخدام لوحة المفاتيح في الـ Word0---- (725 مشاهده) إضافة كلمة سر إلي ملفات الورد دون استخدام برامج0--- (795 مشاهده) دمج المراسلات0-- (441 مشاهده) وضع صورة كخلفية للنص0-- (572 مشاهده) السماح للمستخدمين بتعديل أجزاء من ملف وورد محمي (Word2003)0--- (389 مشاهده) كتابة الأرقام الكسرية ورموز المعادلات0-- (646 مشاهده) درس كامل عن الدمج السهل من لوحة المفاتيح ف0-ي برنامج الـ Word (405 مشاهده) دورة الأكسس: الدرس السادس : منوعات في أكسيس .0--- (1,298 مشاهده) دورة الأكسيس : الدرس الرابع : العلاقات0---- (677 مشاهده) أساسيات في Access0--0 (472 مشاهده) تصميم تقرير لطباعة البيانات0---- (503 مشاهده) تصميم نموذج استعراض البيانات0--تصميم نموذج استعراض البيانات0-- (484 مشاهده) تصميم نموذج إدخال البيانات0--- (576 مشاهده) إنشاء قوائم خاصة باستخدام الماكرو(1)0-- (447 مشاهده) خطوات إنشاء الماكرو في تذييل النموذج (2)0-- (381 مشاهده) خطوات إنشاء الماكرو في تذييل النموذج (1)0- (333 مشاهده) استعلامات SQL في Access - تعديل الجداول وإضافة الحقول0- (472 مشاهده) استعلامات SQL في Access - تحديث البيانات الجدولية0-- (425 مشاهده) الاستعلامات الإجرائية -4 (استعلام الحذف)0--- (222 مشاهده) الاستعلامات الإجرائية -2 (استعلام الإلحاق)0--- (307 مشاهده) تصميم تقرير لطباعة الإجمالي0--- (329 مشاهده) استعلامات التحديد Select Query مع أمثله (1)0--- (436 مشاهده)
روابط ذات صلة
روابط دليل وصلات
خطوط منتديات مدرسة المشاغبين افلام مقاطع يوتيوب بروكسي proxy ماسنجر مسنجر العاب فلاش اغاني اناشيد مسجات رسائل sms جوال موبايل بلوتوث صور جديدة برامج جديدة خطوط بث مباشر مشاهدة قنوات فضائية على النت تلفزيون راديو television radio tv live منتديات فراشة حواء - للبنات للنساء للستات للحريم |
دروس كمبيوتر وصيانة دروس حاسب دروس مجلة درس نيوك phpnuke الدروس دروس مسنجر MSN - yahoo - Gmail دروس منتديات vBulletin دروس الجوالات والهواتف دروس السي بنل cpanel دروس اكسس access دروس بيونت شوب برو - point shop pro دروس برمجة php - mysql دروس برامج منوعة software دروس ثري دي ماكس 3D max دروس جافا سكريبت JavaScript دروس دريم ويفر DreamWeaver دروس شبكات Networks دروس سويش - swish دروس فلاش - flash دروس فيجوال بيسك Visual Basic دروس فرونت بيج - frontpage دروس فوتوشوب photoshop دروس هكر hacker crack virus > سي شارب - #C > المؤشرات في سي شارب
اعلانات في الموقع على جميع الصفحات
المؤشرات في سي شارب
بسم الله الرحمن الرحيم
المؤشرات في لغة السي#
- ماذا يجب أن تعرف أولا؟
المواضيع السابقة ليست محل بحث هذا المقال، لكنه يفترض بك المعرفة الجيدة بها، و إن كنت تشعر أن عندك شيئا من القصور في أحد المواضيع السابقة، أرجو أن لا تتردد في القراءة عنه؛ لتحصل على الفائدة المنشودة من المقال التالي، و لا تنس أنه من السهل أن تجد في الإنترنت ضالتك المنشودة. - محتويات المقال:
- المقدمة: هذا الاستخدام و إن قدم خدمات جليلة للمبرمجين و سرع من أداء البرامج و التطبيقات، إلا أنه بالمقابل زاد العبء على المبرمج الذي أصبح يخصص جزءا لا بأس به من وقته لمراقبة و إدارة موارد النظام و لاسيما الذاكرة يدويا - عن طريق برنامجه طبعا - حيث ما من وسيلة لعمل ذلك آليا (Dynamically)، و بسبب هذا الوقت "الضائع" و الذي يأخذ جزءا كبيرا من الوقت المخصص لإنجاز البرامج أو التطبيقات، و حاجة الشركات إلى إنجاز مشاريعها بأسرع ما يمكن، إضافة إلى وقوع المبرمجين - هاويهم و محترفهم - في أخطاء "قاتلة" قد تؤدي إلى فشل البرنامج في إنجاز مهامه التي صمم من أجلها، تم طرح البدائل في لغات البرمجة التي تلت C و C++ أو اشتقت منها، و قد يكون المثال الأبرز هنا هو لغة جافا (Java) التي يقوم فيها (Garbage Collector) أو ما يعرف اختصارا بـ (GC) بعملية إدارة الذاكرة و تهيئة المتغيرات فيها و إزالتها منها عند انتفاء الحاجة لها و في الوقت المناسب. هذه البدائل سرعت من عملية التطوير و إنجاز المشاريع، و قللت من الأخطاء التي كانت تحصل نتيجة الإدارة اليدوية للذاكرة، و أصبح المبرمج يركز اهتمامه على عمل البرنامج بدل التركيز على أفضل السبل لإدارة الذاكرة. لكن مما يؤسف له أن هذه البدائل نظرت إلى المؤشرات (Pointers) على أنها "شر كلها"، و منعت المبرمج من التعامل المباشر مع الذاكرة، و حرمته من أحد أهم الميزات التي كانت متوفرة في C أو C++، و التي كانت تمكنه بحرية و مرونة من تحديد ما يريد من برنامجه أن يعمل، و هذا - بالتالي - أثر سلبا على قدرات و إمكانيات البرامج و التطبيقات في التعامل مع الذاكرة، و أثر كذلك على سرعة أداء التطبيقات التي تحتاج إلى القيام بعمليات كثيرة في الذاكرة، أو القيام بـ "رحلات" متكررة من و إلى الذاكرة. لاحظ معي المثال التالي - المكتوب بلغة C# -
// NormalCopy.cs using System; public class NormalCopy { public static void CopyArray(byte [] Src, byte [] Dst) { for (int j = 0; j < 10000; ++j) for (int i = 0; i < Src.Length; ++i) Dst[i] = Src[i]; } public static void Main() { byte [] MySrcArray = new byte[1000]; byte [] MyDstArray = new byte[1000]; for (int i = 0; i < MySrcArray.Length; ++i) MySrcArray[i] = (byte) i; CopyArray(MySrcArray, MyDstArray); Console.Read(); } }
ملاحظة مهمة جدا: المثال السابق و كل الأمثلة التالية ما هي إلا وسيلة لإيصال فكرة معينة و ليس مثالا يحتذى في الطريقة المثلى للبرمجة في المثال السابق، يتطلب نسخ مصفوفة (Array) مكونة من 1000 عنصر من نوع (byte) لأخرى "رحلات منتظمة" ذهابا و إيابا من و إلى الذاكرة، و ما يصاحب ذلك من عمليات قراءة و كتابة و حجز و تفريغ و ما شابه ذلك، مما يؤثر سلبا على سرعة أداء البرنامج. البرنامج السابق استغرق من الوقت حوالي (0.02923) ثانية لتنفيذه أو ما يقارب الثلاثة أجزاء بالمائة من الثانية، وقت قصير، أليس كذلك؟ احفظ هذا الرقم لأننا سنعود إليه لاحقا. أرجو الانتباه هنا إلى أن لا فائدة من التكرار (Loop) الأول غير زيادة الوقت المستغرق لتنفيذ البرنامج، و نحن بحاجة لذلك في مثالنا لحصول على زمن معقول يفيدنا في عملية المقارنة. و بسبب الحاجة لاستخدام المؤشرات (Pointers) و الحاجة لإدارة الذاكرة آليا تم بناء لغة برمجة تجمع ما بين الإثنين، و هي C#، و تم فيها توفير الإمكانيات لإدارة الذاكرة آليا عن طريق GC - كما في جافا (Java) - إضافة إلى إمكانية الإدارة شبه اليدوية للذاكرة باستخدام المؤشرات (Pointers)، حيث يكون المبرمج مسؤولا عن تعرف و إدارة متغيرات الذاكرة - المؤشرات (Pointers) - دون أن يكون مسؤولا عن عمليات التفريغ و التنظيف كما هو الحال في C و C++. - كيف و متى تستخدم المؤشرات (Pointers)؟ عند استخدام المؤشرات (Pointers) في C#، يجب استخدامها ضمن العبارة (unsafe) و هي كلمة محجوزة (Reserved word or Keyword) تحدد جزء الشيفرة (Code) الذي يتضمن استخداما للمؤشرات (Pointers)، و هذه الكلمة يمكن استخدامها بمفردها أو عند تعريف الأعضاء (Members) سواء كانت من الخصائص (Properties) أو الوظائف (Functions) أو المشيدات (Constructors) أو غيرها و كذلك عند تعريف الفئات (Classes) و ما إلى ذلك، لاحظ الأمثلة التالية:
// Using 'unsafe' as block in a function
و السبب الداعي لاستخدام (unsafe) هو أن .Net تتبع سياسة معينة في الأمان، فلا يتم تنفيذ أي ملف أو جزء منه إلا إن كان ذلك التنفيذ آمنا - بعد قيام .Net بالتأكد من ذلك - و هذا يتحقق في حالة عدم استخدام المؤشرات (Pointers)، أما عند استخدام (unsafe) فلا يتم التنفيذ إلا في حالة توفر بيئة موثوقة، لأن .Net لا تقوم بالتأكد من كون التنفيذ آمنا. عند ترجمة الشيفرة (Code) المتضمنة عبارة (unsafe) إلى (Intermediate Language) أو ما يعرف اختصارا بـ (IL) و تحويل الشيفرة المصدرية (Source Code) إلى (Assembly) - ملف تنفيذي (exe) أو مكتبة (dll) و غيرها - يتم التعامل مع (Assembly) كاملا باعتباره (unsafe)، لأن (unsafe) في .Net يعرّف على مستوى (Assembly). يجب أن تعلم أخيرا أنه عند ترجمة شيفرة C# أو (Compile C# Code) تحتوي على عبارة (unsafe) يجب أن ترسل الأمر (/unsafe) إلى مترجم C# أو (C# Compiler) كما في المثال التالي:
csc /unsafe MyFile.cs
حيث إن (csc) هو مترجم C# أو (C# Compiler) - كما هو معلوم -، و (MyFile.cs) هو الملف المراد ترجمته (Compile) إلى (IL) - أنواع المؤشرات (Pointers):
MyClass MyObject = new MyClass(); // in C#
المؤشرات في C# على نوعين:
و (type) هو أحد الأنواع التالية:
تأمل معي الأمثلة التالية و التي توضح النقاط السابقة، و طريقة تعريف المؤشرات، و إسناد القيم إليها، و قراءة القيم التي تشير إليها:
byte * pMyByte; // Pointer to byte
و مما تقدم و من الأمثلة السابقة يمكننا ملاحظة التالي:
- مثال جيد:
// FastCopy.cs
في المثال السابق تم استخدام مؤشر (Pointer) من نوع (int *) للقيام بنسخ كل أربعة عناصر معا، و هذا يقلل من عدد المرات التي نحتاج فيها للقراءة و الكتابة من و إلى الذاكرة. لاحظ في التكرار (Loop) الثاني استخدام المعامل (>>) أو (Right-Shift Operator) الذي يقوم بإزاحة العدد الثنائي - العامل (Operand) الأيسر - نحو اليمين بالمقدار المعطى في العامل (Operand) الأيمن. ففي مثالنا (Count >> 2) تم إزاحة الرقم 1000 و هو (1111101000) بالثنائي خانتين نحو اليمين - أزيل منه رقمان من اليمين - ليصبح (11111010) و هو 250 بالعشري، إي إن إزالة رقمين من اليمين يقسم العدد - قسمة صحيحة - على أربعة (هل تستطيع أن تخمن نتيجة الإزاحة خانة أو ثلاث؟) و أخيرا في التكرار (Loop) الثالث استخدمنا المعامل (&) أو (Bitwise AND) الذي يقوم بضرب كل خانة من الرقم الثنائي - العامل (Operand) الأيمن - مع نظيرتها في الرقم الثنائي الآخر - العامل (Operand) الأيسر -. و في مثالنا (Count &= 3) تكون النتيجة باقي قسمة الرقم 1000 على 4. إن الهدف من التكرار (Loop) الثاني هو نسخ العناصر أربعا أربعا، أما التكرار (Loop) الثالث فهدفه نسخ ما تبقى من عناصر، إن كان عدد عناصر المصفوفة (Array) لا يقبل القسمة على أربعة، و لا ننسى أن التكرار (Loop) الأول فقط لزيادة وقت تنفيذ البرنامج. على الرغم من أن المثال السابق أطول من المثال الأول، و قد يبدو معقدا كذلك، إلا أنه استغرق (0.00087) ثانية لإتمام التنفيذ، و بالمقارنة مع الزمن الذي حصلنا عليه في المرة السابقة، يبدو فارق السرعة بين المثالين واضحا جدا لصالح المثال السابق، فالزمن الذي سجله المثال الأول أطول بما يزيد عن 36 مرة، و هذا الفارق أكثر من كاف للمبرمج ليتخذ قراره باستخدام المؤشرات (Pointers) إن كان برنامجه يقوم بالكثير من هذه العمليات التي تستهلك وقتا يمكن توفيره لصالح سرعة الأداء. في الإنترنت تجد العديد من الأمثلة الحقيقية و الأكثر تعقيدا و التي تجعل من استخدام المؤشرات (Pointers) أمرا لا بد منه. كما تجد في مكتبة MSDN مثالا جميلا عن استخدام المؤشرات (Pointers) في معالجة الصور، و ما توفره لك من إمكانيات و سرعة أداء لا يمكن الوصول إليها بدون استخدام المؤشرات (Pointers). - الخلاصة:
درس المؤشرات في سي شارب
أضف هذه المادة في موقعك:
مواد مشابهة:
|
||||||||||||||||||||||
