100
ﻋﻤﻞ اﻃﺎر ﺑﺮﻣﺠﺔ.NET ﺑﺎﺳﺘﺨﺪامVisual Basic .NET -- اﻟﻌﺴﻴﺮي ﺗﺮآﻲ ﻋﺭﺽﺴﺨﺔ ﻟﻠﻜﺘﺎﺏ ﺍﻻﻭﻟﻰ ﺍﻟﻁﺒﻌﺔ ﻤﻥ ﺍﻻﺨﻴﺭﺓ ﻗﺒلﻤﺭﺍﺠﻌﺔ. ﻤﻼﺤﻅﺔ: ﻤﻨﻘﺤﺔ ﻏﻴﺭ ﺍﻻﺨﻁﺎﺀ.

vb 2 turki

Embed Size (px)

Citation preview

باستخدامNET.برمجة اطار عمل

Visual Basic .NET

ترآي العسيري--

.لمراجعة قبل االخيرة من الطبعة االولى للكتابمن انسخة عرض

.االخطاء غير منقحة: مالحظة

سم اهللا الرحمن الرحيمب

سبحانك لا علم لنا إلا ما ((

))إنك أنت العليم الحكيم علمتنا

اهداء

الجمال في الحياة شئ يجبر الفؤاد ...ى ذآره في آل لحظة من لحظات خفقانه عل

وان لم تكوني من الجمال في الحياة، ... الحياة منك الىفحسبي ان الجمال قد نبض

امي الحبيبة،

...اهديك هذا الكتاب

ابنك المخلص

NET.برمجة اطار عمل Visual Basic .NETباستخدام

2003الطبعة االولى

محفوظـة Visual Basic .NET باسـتخدام NET.طـار عمـل برمجة احقوق كتاب �

أي ه ـب للمؤلف، وال يحق ألي شخص او جهة رسمية من اعادة نشر هذا الكتاب او جـزء مـن .وسيلة دون االذن الخطي من المؤلف

ات او الشـركات � ، Visual Basic .NET ،ADO .NETكــ (اسماء البرامج او التقنـي

Microsoft.... تجارية مسجلة الصحابها، والمؤلف يحترم هذه العالمـات هي عالمات ) الخـتم ذكرهـا م ي ويقر بها لماليكها سواء كانوا افراد او شركات او اي جهات تنظيمية اخرى، وـل

.لالختصار

ة وال يقصـد � اسماء االشخاص او الشركات والمذكورة في امثلة هذا الكتاب هي اسماء وهمـي .ةبها تحديد هوية اشخاص او جهات معين

ر � ف غـي تم اختبار المادة العلمية في هذا الكتاب والتحقـق منهـا ومراجعتهـا، اال ان المؤـل

.مسؤول باي شكل من االشكال عن االضرار الناتجة من تطبيق المعلومات في هذا الكتاب

ق � م توـث و ـل ى ـل جميع االراء الموجودة في هذا الكتاب تعبر عن رأي المؤلف الشخصي حـت .سيةبامثلة او ادلة ح

المحتويات

تمهيد تقديم

المقدمة لمن هذا الكتاب؟ ؟Visual Basic 1�6ماذا عن مبرمجي

المصطلحات تعريب ام تعذيب؟ ماذا يقدم لك هذا الكتاب؟

CD-ROMالقرص المدمج صفحة الكتاب على االنترنت

) هام جدا(االخطاء كلمة اخيرة

االساسيات: الجزء االول

Visual Basic .NETتعرف على : االولالفصل NET.الحياة قبل

DOSالبرمجة تحت Windowsاالنتقال الى

COMالحلم اصبح حقيقة مع تحديات االنترنت

عشرات التقنيات الداء الوظائف NET.الحياة بعد

االستقاللية عن منصات العمل .NET نسخة محسنة من COM

تكامل لغات البرمجة 1ت ويب هي مستقبل االنترنتخدما

ماذا عن المبرمج العربي؟ NET Framework.محتويات اطار العمل

JITالترجمة على الفور Assembliesالمجمعات

Visual Studio .NETبيئة التطوير نوافذ بيئة التطوير

القائمة الرئيسة اشرطة االدوات

كتابة برنامجك االول الحلول والمشاريع

واع المشاريع ان بناء برنامجك االول

ArabicConsoleاستخدام الترجمة والتوزيع

لغة البرمجة: الثانيالفصل Modulesالوحدات البرمجية Sub Mainاالجراء Sub Newاالجراء المتغيرات والثوابت

التصريح عن المتغيرات قابلية الرؤية وعمر المتغيرات

انواع البيانات القيم اسناد

الثوابت التركيبات والمصفوفات

Enumالتركيبات من نوع Structureالتركيبات من نوع

المصفوفات االجراءات والدوال

االرسال بالمرجع او القيمة تخصيص الوسيطات المرسلة

Windows APIتجاوز الحدود مع التفرع والتكرار

If … Thenالتفرع باستخدام Select Caseدام التفرع باستخ

الحلقات التكرارية مجاالت االسماء

تعريف مجال اسماء الوصول الى عناصر مجال االسماء

Importsاستيراد مجال اسماء باستخدام

Importsاستيراد مجال اسماء دون استخدام الفئات والكائنات: الثالثالفصل

مدخلك السريع للفئات بناء اعضاء الفئات Fields الحقول Methodsالطرق

Propertiesالخصائص Eventاالحداث استخدام الكائنات

ماهي حقيقة الكائن؟ عبارات خاصة بالكائنات

اسناد القيم حياة وموت الكائنات

ارسال الكائن بالمرجع او القيمة االعضاء المشتركة

Shared Fieldsالحقول المشتركة Shared Methodsالطرق المشتركة

Shared Propertiesالخصائص المشتركة Shared Eventsاالحداث المشتركة

الوراثة: الرابعالفصل مقدمة الى الوراثة

مبدأ الوراثة Visual Basic .NETتطبيق الوراثة ـب

التعامل مع الفئات الوارثة والمورثة وراثة االعضاء

Constructorsالمشيدات كائنات التعامل مع ال

Overridingاعادة القيادة اعادة قيادة الطرق والخصائص

MyBaseاستخدام MyClassاستخدام Shadowingالتظليل

Shared Membersاالعضاء المشتركة

كلمات محجوزة اضافية NotInheritableالكلمة المحجوزة MustInheritالكلمة المحجوزة MustOverrideالكلمة المحجوزة

محددات الوصول قابلية الرؤية للفئات

قابلية الرؤية العضاء الفئات تأثير محددات الوصول على المشيدات

الواجهات، التفويض، والمواصفات: الخامسالفصل الواجهات

بناء واجهة تضمين الواجهة

الوصول الى الواجهة وراثة الواجهات NET Framework.واجهات من اطار عمل

IComparableالواجهة ICloneableالواجهة

IEnumerator و IEnumerableالواجهتان التفويض

االجراءات الستاتيكية اجراءات الفئات محاكاة االحداث دمج التفويضات

المواصفات Visual Basic .NETصيغة كتابة المواصفات في

NET Framework.مواصفات من اطار عمل Conditional Attributeالمواصفة DebuggerStepThrough Attributeالمواصفة Obsolete Attributeالمواصفة FieldOffset والمواصفة StructLayoutالمواصفة

بناء مواصفات خاصة

NET Framework.اطار عمل : الثانيالجزء الفئات االساسية: السادسالفصل

System.Objectالفئة Object طرق الفئة

البيانات المرجعية والبيانات ذات القيمة مرة اخرى الصندقة والالصندقة

الفئات الحرفية الخصائص والطرق

مقارنة الحروف CultureInfoالفئة

البحث عن الحروف Charالفئات من النوع StringBuilderالفئات من النوع

الفئات العددية الخصائص والطرق

داد تنسيق االع Mathالفئة

Random Numbersتوليد االعداد العشوائية فئات اخرى

فئات الوقت والتاريخ Enumالفئات من النوع Arrayالفئات من النوع

System.Collectionsمجال اسماء IList و ICollectionالواجهات

Stackالفئة Queueالفئة ArrayList3الفئة

اف االخطاءاكتش: السابعالفصل فكرة عامة

اخطاء وقت التصميم اخطاء وقت التنفيذ

الشوائب Exceptionالكائن

Catching Exceptionsتفادي االستثناءات Throwing Exceptionsرمي االستثناءات

Custom Exceptionsانشاء فئات استثناءات خاصة Errالكائن

تفادي االستثناءات رمي االستثناءات

Err و Exceptionاالختيار بين Visual Studio .NETادوات التنقيح من

اساليب التنفيذ نوافذ اخرى Configurationsاالعدادات

الملفات والمجلدات: الثامنالفصل Directoryالفئة

طرق تعود بمسارات البحث عن الملفات والمجلدات

Fileالفئة Streamالفئة

ق المشتركة الخصائص والطر التعامل مع الملفات النصية التعامل مع الملفات الثنائية

خاصة Custom Streamsتكوين فئات اخرى

Pathالفئة FileInfo و DirectoryInfoالفئات

Object Serialization تسلسل الكائنات : التاسعالفصل مدخلك الى تسلسل الكائنات

ماهو التسلسل؟ Binary Serializationيغة الثنائية التسلسل بالص

)غير قياسية(تسلسل انواع بيانات مخصصة Object Graphخريطة الكائنات

نسخ الكائنات خاصةCustom Serializationانشاء

ISerializableالواجهة مثال تطبيقي

XMLالتسلسل بصيغة XmlSerializerالفئة

مواصفات اضافية عكس التسلسلاحداث تقع عند

Threadingمسارات التنفيذ : العاشرالفصل مقدمة الى مسارات التنفيذ

انواع مسارات التنفيذ متى تستخدم مسارات التنفيذ المتعددة؟

انشاء مسار تنفيذ الطرق والخصائص

التعامل مع مسارات التنفيذ مشاركة البيانات

المتغيرات المحلية الديناميكية ThreadStatic Attributeالمواصفة

TLSوحدة التخزين المحلية تبادل البيانات بين مسارات التنفيذ

Thread Synchronizationالتزامن SyncLock … End SyncLockالتركيب

Synchronizationالمواصفة MethodImplالمواصفة

فئات اخرى ThreadPoolالفئة

Timersالمؤقتات System.Timers.Timerالمؤقت System.Threading.Timerالمؤقت

Assembliesالمجمعات : الحادي عشرالفصل Managed Modulesالوحدات المدارة

Assembliesالمجمعات المجمعات االحادية والمتعددة الملفات

اساليب تنفيذ المجمعات المجمعات الخاصة والمشتركة

Strong Namesاالسماء القوية Assemblyلمواصفة ا

Configuration Filesملفات التهيئة انواع ملفات التهيئة

تغيير االعدادات اعدادات لمفات التهيئة

NET Framework Configuration. استخدام االداة ادوات الترجمة، الربط، والتسجيل

VBC.EXEالمترجم AL.EXEالرابط

SN.EXEالمسجل GACUTIL.EXEالمسجل

Reflection Classesفئات االنعكاس : الثاني عشرالفصل التعامل مع المجمعات والوحدات المدارة

Assemblyالفئة Moduleالفئة

التعامل مع انواع البيانات System.Typeالفئة

خصائص اضافية التعامل مع االعضاء

MemberInfoالفئة القاعدية التعامل مع الحقول

مع االحداث التعامل التعامل مع الطرق التعامل مع االحداث

Parametersالوسيطات التعامل مع الكائنات

ReflectionExampleالفئة قراءة قيم الحقول /اسناد قراءة قيم الخصائص /اسناد

استدعاء الطرق مواضيع اخرى

االنشاء الديناميكي للكائنات معرفة االجراءات المستدعية

Windowsتطوير تطبيقات : الثالثالجزء

Windows Formsنماذج : الثالث عشرالفصل Windows Formsمدخلك الى نماذج

Form Designerمصمم النماذج نظرة حول الشيفرة المولدة التعامل مع اكثر من نموذج

من االعراب Formمحل الفئة الخصائص، الطرق، واالحداث

خصائص النموذج موذج طرق الن

احداث النموذج MDI Formsنماذج

Child Windowsالنوافذ االبناء خصائص وطرق اضافية

Menusالقوائم الخصائص، الطرق، واالحداث

Popup-Menuالقوائم المنبثقة مرة اخرى MDIنماذج

االنشاء الديناميكي للقوائم مواضيع متقدمة

Modelessالتفاعل مع نوافذ Form Inheritanceنماذج وراثة ال

النماذج المحلية Controls االدوات: الرابع عشرالفصل

الخصائص المشتركة Nameاسم االداة

خصائص المظهر خصائص الموقع والحجم

خصائص االحتضان خصائص االلوان خصائص التركيز خصائص الجدولة خصائص اخرى

الطرق المشتركة االحداث المشتركة

داث الفأرة اح

احداث لوحة المفاتيح احداث التركيز احداث اخرى عرض سريع لالدوات

Labelاالداة LinkLabelاالداة TextBoxاالداة Buttonاالداة CheckBoxاالداة RadioButtonاالداة ListBoxاالداة CheckedListBoxاالداة ComboBoxاالداة ImageListاالداة TreeViewاة االد

ListViewاالداة StatusBar و ToolBarاالداتين Splitterاالداة

ادوات صناديق الحوار الشائعة ادوات المزودات

ادوات اخرى تقنية المرآة

RightToLeftالخاصية RightToLeftقصور الخاصية

مدخلك الى تقنية المرآة Visual Basic .NETتطبيق تقنية المرآة ـب

مشاكل اضافية ادوات صناديق الحوار الشائعة

صناديق الرسائل +GDIمبادئ : الخامس عشرالفصل

الرسم المتقدم Graphicsالكائن

رسم الخطوط، المستطيالت، والدوائر رسم المنحنيات المعقدة

Penكائن القلم GraphicsPathكائن مسار الرسم

التعبئة Brushكائن الفرشاة انظمة القياس

التعامل مع الصور تحميل وحفظ الصور

عرض الصور عكس، قلب، وسحب الصور

تحديد االلوان Iconsالرموز

المخرجات النصية عوائل الخطوط رسم النصوص التفاف النص

StringFormatالكائن Controlsعودة الى االدوات

مواضيع متقدمة: السادس عشرالفصل دوات خاصة تطوير ا

وراثة اداة حضن مجموعة من االدوات

انشاء اداة مستقلة لمسات فنية اضافية

Windowsتطوير خدمات Windowsمقدمة الى خدمات

Windows Serviceانشاء مشاريع من نوع تصحيح الشيفرة

System.IO.FileSystemWatcherالفئة كتابة الشيفرات تسجيل الخدمة

InstallUtil.EXEاالداة فئات اخرى

Applicationالفئة

Cursorالفئة SendKeysالفئة

RegistryKey و Registryالفئتان Helpالفئة

برمجة قواعد البيانات : الرابعالجزء

ADO.NETاستخدام : السابع عشرالفصل ADO.NETمدخلك الى

المنفصلالوضع المتصل والوضع NET Data Providers.مزودات

ADO.NETفئات Connectionكائن االتصال

انشاء كائن اتصال نص االتصال

فتح واغالق االتصاالت Commandكائن االوامر

انشاء كائن اوامر الربط مع اتصال

SQLتنفيذ جمل االستعالم قرائة السجالت

DataReaderكائن البيانات انشاء كائن بيانات قرائة السجالت

® Microsoft SQL Serverخاص بمستخدمي قرائة نتائج متعددة

المنفصل للوضع ADO.NET: الثامن عشرالفصل DataSetكائن البيانات

DataTableالفئة DataRowالفئة DataColumnالفئة DataRelationالفئة

من الصفر DataSetانشاء كائن بيانات DataAdapterكائن المحول المنفصلاريو الوضع سين

DataAdapterانشاء كائن محول الربط مع اتصال

قرائة البيانات تحديث البيانات

xxxCommandتخصيص افضل للخصائص اتقاء شر التعارضات

عرض التعارضات RowUpdatedالحدث

XMLربط البيانات والتكامل مع : التاسع عشرالفصل ربط البيانات

انواع الربط ميكانيكية الربط

الربط الى مصفوفة ADO.NETالربط باستخدام Complex Bindingالربط المعقد

XMLفئات خاصة ـب XmlTextReaderالفئة XmlTextWriterالفئة

XML و ADO.NETتكامل XMLكتابة البيانات بصيغة XMLقرائة البيانات بصيغة

برمجة ويب : الخامسالجزء

)ASP.NET) 1تطبيقات : عشرونالالفصل IISالخادم

IISتركيب الخادم االدلة الوهمية

الوصول الى االدلة الوهمية Web Formsمدخلك الى نماذج

انشاء المشروع ضبط االعدادات الرئيسة

كتابة الشيفرات تحليل الشيفرة

اساليب تنفيذ الصفحة

الخالصة Pageالفئة

خصائص صفحة النموذج رق صفحة النموذجط

احداث صفحة النموذج وسوم اضافية

االدوات Web Forms Controlsادوات HTML Forms Controlsادوات

Validationادوات التحقق )ASP.NET) 2تطبيقات : الحادي والعشرونالفصل

االساسيةASP.NETكائنات صفحات HttpRequestالكائن HttpResponseالكائن HttpServerUtilityالكائن HttpApplicationStateالكائن HttpSessionStateالكائن

Global.asaxالملف ()xxxEnd و ()xxxStartاالجراءات

()Global_Errorاالجراء Securityاالمان

مدخلك الى الصالحيات ASP.NETاوضاع التصديق في

ملفات التهيئة للتصديقFormsالوضع <credentials>الوسم Login تسجيل الدخول صفحة مواضيع متقدمة

Cachingالتخزين المتغيرات العامة حماية الصور

االنشاء الديناميكي للصور HTTP Modulesوحدات

Web Servicesخدمات ويب : الثاني والعشرونالفصل

مدخلك الى خدمات ويب كيف تعمل خدمات ويب؟

بناء خدمة ويب انشاء المشروع كتابة الشيفرة

ر الخدمة من المتصفحاختبا استخدام الخدمة كيف تم الربط؟ تحديث الخدمة

معلومات اضافية

المالحق XMLلغة وصف البيانات : الملحق أ SQLلغة االستعالم : الملحق ب

تمهيد 0

تقديم

ر Visual Basic .NET عن لغة ا جديدابكتابة كتابقام تركي العسيري ان لقد اسعدني خبر ي تعتـب والـت

اب يعرفـك مستقبل للمطورين والمبرمجين لغة ال ، وان كنت ال تعلم من هو تركي العسيري، فدع هذا الكـته المؤسـس للموقـع NET.به؛ يكفيك مقاالته التي تملتئ بها المواقع العربية حول تقنية ، والتنسـى اـن

ـ (dev4arabs.com)شبكة المطورون العرب الشهير ي تن بض وكاتب لجميع الشيفرات المصـدرية الـت .وما يجعلني أشعر بالفخر هو أن الكاتب عربي ويوجه خبرته ومعرفته للعربالموقع بالحياة،

ك يتمتع األخ تركي بمزايا خاصة ذي يجعـل ه مـن االسـلوب اـل سواء كان مبرمجا او كاتبا، فلدـيه (انجز مشروعا واآلن أرى أنه ! 2=1+1تستوعب االمور المعقدة وكانها معادلة ر ) كما يلقب كتاـب يعتـب، كمـا سـطر مجموعـة مـن الصـفحات Microsoft .NETاول كتاب من مؤلف عربي حول تقنية

.والموجه خصيصا للمطور العربيائهين فـي كخبير تصميم وتطوير مواقع، أرى بأن الكتاب سيفيد الكثير من المبرمجين العـرب الـت

، وهي قوية جـدا ولهـا ومواقع اإلنترنت المستقبل لتطوير التطبيقاتتقنية تعتبر التقنيةفهذه ، NET.تقنية رمجين ب المـب ى اغـل ـيكون صـعبا عـل ـتيعابها س من االمكانيات ما يفوق التوقعات، ولكـن مسـالة اس

دمون !المستجدين والمخضرمين ايضا ، هذا وان علمت انها من احدث التقنيات الصادرة مـن معامـل رـيد، ، ووجود مصدر)Microsoftاعني من شركة (بوالية واشنطن ى جهـد جهـي ومـن التقانها يحتاج اـل

فمـا مترجمة،NET.، فكل الكتب العربية والخاصة بتقنية النادر الحصول على مرجع لها باللغة العربية اب بهـذا وماهي متطلباتنا بالكم إذا كان الكاتب عربي يعرف كيف نفكر وإلى ماذا نتطلع أو نتوقع من كـت

.الحجم والتخصص يركز على السـهولة والمنطـق فـي نمط االستيعابي الذي يتعمده المؤلف، فهويتميز هذا الكتاب بال

زول ئ فأسلوبه سلس ودا،التسلسل إليصال المعلومة للقارئ وهذا ما يعرف عن الكاتب مـا مـا يحـاول الـن، كما انه يضفي على الكتاب اسلوب المحـاورة ممـا لمستوى القارئ ثم يرتقي به كلما استمر في القراءة

ة يوحي ا ك االمثـل ى ذـل ن المؤلف امامك ويناقشك في المواضيع وكأنك في قاعة محـاظرة، اضـف اـل .الفورية التي يعرضها عند الحديث بعد شرح كل نقطة، فهي ليست كبيرة ليصعب تتبعها

ب حـريص بواضح من األسلوب في الكتااما عن المسالة التجارية، ف ة ووفرة المعلومات بأن الكاـتر قدر ممكن وبالتالي يستطيع تطبيق مـا تعلمـه ثر من المعرفة ليجعل القارئ يتعلم أكر قدبعلى إيصال أك

للتكثير مـن عـدد NET Documentation.فال يقوم بنسخ جداول وثائق ،واإلستفادة من قراءة الكتاب

ب ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ـــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـ

ب تتجـاوز صفحات وزيادة الدخل ال كما تفعل اغلب الكتب المنتشرة فـي االسـواق، فمعظـم هـذه الكـت NET.منسوخ مـن وثـاق ا االلف صفحة، وبعد شرح كل نقطة يقوم المؤلف بعرض جدول صفحاته

Documentation ة . واضافته ـتالحظ جمـل ك س ولكن مع هذا الكتاب فلن يحدث معك ذلك، حيث اـند " لمزيد من التفاصيلMSDNراجع مكتبة "المؤلف المتكررة ب ال يرـي ى ان الكاـت وهذا خير دليل عـل . وتكرارها في كتابهNET Documentation.منسوخة من وثائق زيادة الصفحات ال

ـباب بالمضـي قـدما ، في نشر المعرفة للعربالمؤلفوختاما أتمنى من اهللا أن يوفق وأن يبدأ الشك لهـذا ، وانا واثقفي مجال النشر والتعليم ألنه سالح العصر كامل الثقة بأنك لن تشعر بالندم بعـد اقتناـئ

. مع الكتب االخرى في رفوف مكتبتك، بل سيظل ناصبا على سطح مكتبكالكتاب، ولن تضعهاب، : تنبيه اخير ناتج من تجربة شخصية الكثير من المفاجئات واالفكار ستجدها فـي هـذا الكـت

ـيفرات ة الش وم دون تجرـب ـتطيع الـن ن تس ك ـل لذلك ال تقرأ هذا الكتاب قبل موعد النوم بدقائق حيث اـن !المصدرية بنفسك

، يحيى مكي زكريإياد .IAWMD (iawmd.com) اإلتحاد العالمي لمصممي ومدراء الموقع فيعضو

.IFAWAL (ifawal.com)اإلنترنت للجميع باللغة العربية المؤسس المشارك لشركة

ج ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ـــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـ

المقدمة

اتي التوقعـات كمـا رسـمت فـي الخـاطر، م ـت عندما شرعت في كتابة هذا الكتاب، خانتني العبرة وـلع اكبر من كونه شرح لغة برمجة واجراء تطبيقات بها، حيث ان كتابة كتاب عن لغـة البرمجـة فالموضو

Visual Basic .NET ليس سوى لهجة بلسان اخر تخاطب بها تقنية Microsoft .NET. او اي لغـة برمجـة Visual C# .NET او مبرمج Visual Basic .NETسواء كنت مبرمج

ر، اذ ان اللقـب NET Framework.عمل هه الى اطار اخرى موج فلن تقدم ولن تاخر ذلك الشئ الكبـيـيل – او NET.مبرمج الذي عليك البحث عنه دائما هو د مـن التفص رمج -لمزـي بلهجـة NET. مـب

Visual Basic .NET . مبرمج وان لم يتضح لك المعنى من اللقب.NET، ك معرفـة ان لغـة فعلـياب المعقـد والمسـمى ليست سوى مفتVisual Basic .NETالبرمجة NET.اح بسيط تستخدمه للـب

Framework فاالحتراف في برمجة ،Visual Basic .NET ه لن يتطلب منك ذلك الجهد للوصول الـير ءقرا(في اياما معدودات راف )ة الفصول الخمس االولى من هذا الكتاب كافية الى حد كبـي ، امـا االحـت

. شئ في حياتك تقريبا فيحتاج الى تفرغ ذهني من كلNET.في تقنية الغ ان NET Framework.اطار عمل معقد جدا، وهو بحر ليس له بداية وال نهاية، وقـد ال اـب

اب مخصـص ى كـت اج اـل ـ . قلت ان كل ميناء من مواني هذا البحر تحـت الف الصـفحات والخاصـة آفار ولتقديم كتاب عن هذه التقنية. الرسمية خير دليلMicrosoft .NETبمستندات تقنية ي اختـي ، كان عـل

:احد الحلول الثالثاب عـن تطـوير تطبيقـات ـين، كـت االول هو كتابة كتب متعددة يختص كل واحد فيها بمجال مع

Windows ة لبرمجـة قواعـد ADO.NET واخر عن برمجة ويب، وثالث عن االستخدام المتقدم لتقنـيـيات الىالبيانات، ولكن يعيبه الوقت الطويل الذي سيستغرقه باالضافة ب شـرح اساس ان جميعهـا تتطـل

ادة . اللغة، مما يعني تكرار معظم الصفحات الحل الثاني، هو مشاركة كتاب اخرين ومحاولة توسـعة وزـيـبب المادة العلمية في هذا الكتاب، ولكن يعيبه اختالف االساليب التي يتبعهـا كـل م ف ممـا قـد يس ؤـل

ك اما الحل الثالث فهو اقتطاف . التشويش على القارئ من كل بستان زهرة ووضعها كمقدمـة ومـدخل ـل Visual باسـتخدام NET.برمجـة اطـار عمـل يمكنك من االنطالق منه، وهذا ما فعلته في كتاب

Basic .NET.

لمن هذا الكتاب؟

رمجين، هذا الكتاب للمبتدئين ام للمتوسطين او للمحترفين؟ سؤال يراود ه اغلب المـب ويهتمـون فـي اجابـتـتويات، وقـد يكـون مقياسـي . امهم بمؤلف الكتاب اكثر من اهتم لكل انسان مقياس خاص لتصنيف المس

ذكر صـفات الشخصي مرفوض من قبل الكثيرين، لذلك لن اعطيك اجابة مباشرة لهذا السؤال، وسأكتفي ـب .االشخاص الذين اعتقد ان الكتاب سيكون مناسب له من نظرتي الشخصية

د ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ـــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـ

وع االول وهـو استطيع تصنيف كتب لغات البرمجة ال واع، الـن Tutorialالتعليمـي ى اربع اـنادئ بقـدر مـا ءحيث يوجه الى االشخاص الذين ليس لديهم الوقت الكافي للقرا ة، وال يودون استيعاب المـب

Step byفستجد في مثل هذه النوعية من الكتب عشرات السطور المتمثل في خطـوات . يهمهم انجازها

Step معينة دون ذلك الشرح مرقمة تقوم بانجاز مهمة. ، وهي كتب ال تقرأ من الغالف الى الغالف وانمـا يرجـع Referenceالمراجع النوع الثاني هو

ة باصـابع . لها من وقت الخر اج للكتاـب وكما تعلم ان المراجع تكتب من قبل االف االشخاص، وقـد احـت .قدمي حتى انجز مرجع قبل ان تشيب شعرات رأسي

ى Workshopورشة العلم ع الكتب هو النوع الثالث من انوا اب اـل ل الكـت دما يمـي ، وهـو عـنث الجانب التطبيقي اكثر من الشرح، ولكن يفترض المؤلف انك تعلم كل شئ عـن لغـة البرمجـة، حـي

.يعرض لك االساليب البرمجية المتعددة النجاز المهام وتطبيقها مباشرةل أ فComprehensiveاالسـتيعابي هـو اما الكتاب الذي امام عينيك فهو من النوع الرابع و مـي

NET.الى شرح االساسيات وبناء قواعد معرفية لتتمكن من االنطالق فـي برمجـة اطـار عمـل فيه Framework اب مقدمـة او من اوسع ابوابها، حيث يمكنك اعتبار ان كل فصل من فصـول هـذا الكـت

ك ،NET Framework.مدخل الى استخدام تقنية من تقنيات اطار عمل ة علـي ويبقى االمر فـي النهاـي .لتتعمق وتتخصص في المجال الذي تريده بنفسك

؟Visual Basic 1����6ماذا عن مبرمجي

ة ـين . Visual Basicحسنا، دعني هنا اخاطب تلك الفئة من المبرمجين عشاق النغمة الرناـن العالقـة بVisual Basic .NET و االصدارات السابقة Visual Basic 1->6اد ان تكون اال عالقة تشـابه ال تك

ـ ـاسماء، فهي مشروع تسويقي اكث ـ ـر من مـا هـو تطـوير للغـة البرمجـة المحتك ل ـرة م ن قـبMicrosoft . حيث ان الضريبة التي كانت ستكلف مشروعMicrosoft .NET هو انتاج لغة البرمجـة

انتاج لغة البرمجـة .Visual Basic واالستغناء عن الماليين من مبرمجي Visual C# .NETالجديدة ى اعـادة -بكل تأكيد–الجديدة امر ال بأس منه، اما قضية االستغناء عن ماليين المبرمجين فهي بحاجة اـل

.نظردة Microsoft بوضوح وصراحة مباشرة، انتجـت Visual C# .NET لغـة البرمجـة الجدـي

ـت : واكاد اتخيل احد صناع القرار في تلك الشركة يقول ـيغ لغـة لما ال نقوم باس ـيغ #Cبدال ص ى ص اـلارة الشـرط -باختصار–، اي BASICشبيهه بلغة ة if احذفوا االقواس من عـب روا كتاـب Then واجـب

.نهاية كل سطر" ;"بعدها، مع الغاء ضرورة استخدام الفاصلة المنقوطة ، اال ان Visual C# .NET هي نسخة بلسـان اخـر مـن Visual Basic .NETصحيح ان ع Microsoftاستطيع ان اجزم ان (ال تكاد تذكر الفروق طفيفة و ى نقتـن تعمدت وضع هذه الفـروق حـت

).انهما لغتا برمجة مختلفتين-Visual Basic 1 واالصـدارات السـابقة Visual Basic .NETبالرغم من تشابه الصيغ بين

د Visual Basic .NET اال انه من الخطأ الكبير والجرم العظيم اعتبار 6< ث اصدار جدـي منهـا، حـي

ه ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ـــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـ

مع االصـدارات السـابقة مـن -كما ذكرت–انك ستتعامل مع لغة برمجة جديدة كليا وليس لها اي عالقة Visual Basic . ا –لذلك، تقبل نصيحتي هذه قبل ان تعاني الكثير من المتاعب ت اـن وانسـى -كما عانـي

ـين Visual Basicكل ما تعلمته سابقا في االصدارات القديمة من ك ، وضع في ع ارك دائمـا اـن اعتـب .Microsoft Visual Basic .NETتتعامل مع لغة برمجة جديدة وحديثة العهد اسمها

؟المصطلحات تعريب ام تعذيب

ـ ار ؤوالتزال مشكلة المصطلحات العربية في رمتها، وبما انني لست فـي منصـب مس د واختـي ل لتحدـيـ ـبا الترجمات العربية الصحيحة للمصطلحات االجنبية، فذلك يعن ار مـا اراه مناس ي فـي اختـي ي حريـت

.ورفض ما ال يناسبنير شـعبية أو وجهة نظري الشخصية حول ترجمة المصطلحات تتمحور حول اختيار الكلمـة االكـث

رجم Help، لديك الكلمة وليس المعنى الحرفيالتي تميل الى توضيح المعنى التقني ي تـت ـثال والـت – مـتخدمي نظـم " تعليمات" اختيار المصطلح ، ولكني فضلت "مساعدة" الى -بشكل صحيح ـين مس لشـعبيته بWindows . من ناحية اخرى، لديك المصطلحOverloading ـ ل "ة والذي تترجمه الكتب العربي بالتحمـي

ه، وكـان "الزائد اه بالهـدف مـن وحي معـن ، وهو تعبير لم استطع تقبله المن بعيد وال من قريب، فـال ـي . هو االنسب واالفضل للترجمة التقنية له"اعادة التعريف"اختياري للتعبير

مع ذلك، قدمت االمر في البداية والنهاية لك ايها القارئ العزيز الختيار المصطلحات التي تناسـب ـتندات ه مـن مس زي ـل ل االنجلـي NET.توجهاتك اللغوية، فال اكاد اذكر مصطلح اال وارفـق المقاـب

Documentation ى الكلمـة اختياراتي ال تناسب ت، وان كان ـيمكن الشـطب عـل ة، ف توجهاتك اللغوـي .وكتابة ما تريد بدالها

ماذا يقدم لك هذا الكتاب؟

دعنا نضع النقاط على الحروف، ونكون واقعين قدر االمكان، فقبل ان توجه لي النقد حول قصـوري فـي جـع ليس مرجعا مـن مرا ، عليك معرفة ان هذا الكتاب NET Framework.ذكر محتويات اطار عمل

MSDN ك ، فال تتوقع مني شرح كل شئ وذكر كافة التفاصيل عن المواضيع التي تطرقـت لهـا، فاـنتخاطب شخص يكتب بعشرة اصابع فقط، ومن غير منطقي مقارنة مجهوده بمجهود االف الموظفين فـي

ان . Microsoftشركة ارك ـب وان كنت شخص تقدر الكم العددي على الكيف المعلوماتي، فيؤسفني اخـب .ذا الكتاب ليس مناسب لكه

د –اذا هل هذا الكتاب بهذا السوء؟ في الحقيقة ستكون شهادتي ه، -بكل تاكـي مجروحـة ان مدحـت : صفحة والمكونة لهذا الكتاب550ولكن دعني اعرض لك ماذا ستجد بين ثنايا اـل

امج تبدأ بعرض كيفية كتابة اول بر من الصفر Visual Basic .NETاساسيات لغة البرمجة ـنباالضـافة . لك، مع شرح الصيغ والعبارات المستخدمة في لغة البرمجة كجمل الشرط، التفرع، والتكرار

ة التوجـه ـ OOPالى نظرة كائنـي ات ة وطريق ف الفـئ ات Classes تعرـي ، Objects النشـاء الكائـن .Polymorphism وتعدد الواجهات Inheritanceواالستخدام االمثل لها لتطبيق مبادئ الوراثة

و ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ـــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـ

ان اردت اخذ جولة سريعة حـول NET Framework.عرض سريع لمكتبة فئات اطار عمل موعـة مـن ج، فستجد ملخصا لها هنا، حيث اعرض لك مNET Framework.مكتبة فئات اطار عمل

ـتثناءات : الفئات االساسية، وفئات اخرى تستخدمها النجاز مهام معينة ات االس ، دخـل Exceptionsكائـنات File IOت خرج الملفا ذ Object Serialization، تسلسل الكائـن ، Threading، مسـارات التنفـي

.Reflection Classes باستخدام فئات االنعكاس Assembliesطريقة التعامل مع المجمعات Windowsباستيعاب فكـرة نمـاذج Windows Applicationاساسيات تطوير تطبيقات

Forms ي جولة سريعة حول معظم االدوات وطريقة وراثتها، كما اخذك فControls ،والغرض منهـا ى . عليهاMirroring باالضافة الى تطبيق تقنية المرآة ر مـدخلك اـل ثم اخصـص فصـل كامـل يعتـب

د ايضـا، اعـرض . وطريقة الرسم والتعامل مع الصور والمخرجات النصية+GDIاستخدام تقنية المزـي .Windows Services وبناء خدمات Custom Controlsلك طريقة تكوين ادواة خاصة

Connectedوشرح لفكرة الوضـع المتصـل لبرمجة قواعد البيانات ADO.NETاستخدام Mode المنفصل والوضع Disconnected Mode ـتخدامها فـي كـال الزم اس ، وذلك بذكر الفئات اـل .XML مع ADO.NETن، كما اتحدث عن طريقة ربطها باالدوات وتكامل تقنية يالوضع

اء ASP.NETالعرض فيه فلسلفة عمـل صـفحات الخـادم ASP.NETمقدمة لبرمجة وبـنب ى عنهـا فـي اغـل ي ال غـن مواقعك المستخدم لهذه التقنية، كما اعرض لك مجموعة من الكائنات الـت

ب ASP.NETمشاريع وطريقـة انجازهـا Web Services، واختم الكتاب بالتحدث عن خـدمات وـي .واستخدامها

CD-ROMالمدمج القرص

ـيف الرمـز يحتوي القرص المدمج المرفق مع هذا الكتاب على جميع الشيفرات المصدرية التي اضكمـا تعمـدت . في اعالها، مقسمة الى مجموعة من المجلدات تمثل رقم الفصل الذي سطرت في الشيفرة

ـيحية المعروضـة ) JPGمن النوع (اضافة ملفات صور فـي الفصـول، تمثل الصور واالشكال التوضف . وذلك خشية عدم وضوحها بين صفحات هذا الكتاب ArabicConsole.DLLكما يمكنك ايجـاد المـل

ه الحقـا فـي الفصـل - في الدليل الجذري للقرص Consoleوالذي طورته لمحاكاة الكائن ساخبرك ـب .Visual Basic .NETتعرف على االول

صفحة الكتاب على االنترنت

رات ال اود انهاء عالقت ى فـت ي معك مع الصفحة االخيرة من هذا الكتاب، بل سيكون شرف لي تمديدها اـلدي . اطول ى برـي ق مراسـلتي عـل يمكنك عزيز القارئ اصطيادي على شبكة االنترنت امـا عـن طرـي

ى اخـر التحـديثات االلكتروني او من خالل زيارة صفحة الكتاب ان كنت ترغـب فـي الحصـول عـل : به، وذلك بتوجيه متصفحك الى العنوان التاليوتصحيح االخطاء المتعلقة

http://www.dev4arabs.com/ar

ز ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ـــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـ

)هام جدا(االخطاء

ـبة يالوصول الى الكمال شئ ال يتم اال بالقدرة االلهية، والعمل الذي امام عين ك جهد بشـري معـرض بنسا سـليما مـن كبيرة للخطأ، يهم ى يكـون مرجعـا عربـي ني جدا التقليل من االخطاء في هذا الكتاب، حـت

، برجاء ابالغي فورا عـن الخطـأ ورقـم )سواء لغوي او تقني(في حالة العثور على اي خطأ . الشوائب .الصفحة الذي وقع فيه، وبهذا تسدي لي خدمة ساكون شاكرا ومقدرا لها

آلمة اخيرة

اب اخي المبرمج العربي من ف الكـت المحيط الى الخليج، بودي توضيح نقطة ضرورية تتمحور حول مؤـلرمج . الذي تقرأه االن ي مـب صحيح ان فن الكتابة بعيد كل المبعد عن مجال عملي اال انه عليك معرفة انـنل ولست كاتب، ة المقـاالت، ـب اقـوم فلست من الذين لديهم اعمدة في الصحف والمجالت ويهـوى كتاـب

ـين عمالقـة . البرامج لمختلف القطاعاتيد من المشاريع وبكتابة العد ر مـن العالقـات ب دي الكثـي كما ـلل اكـاد –واعتقـد . المبرمجين في انحاء المعمورة وقد استفدت الكثير والشئ الكبير من احتكاكي معـه ـب

ـ -اجزم ل تري ـتعلم لغـة انك لم تقتني هذا الكتاب لتتعلم فن البالغة او االستمتاع بالتعابير اللغوية، ـب د ان تة الركيكـة، .Visual Basic .NETبرمجة اسمها لذلك، حاول تجاهل قدر االمكـان تعـابيري اللغوـي

ـيفرات المصـدرية هـي القاسـم Source Codesوضعف اسلوبي البالغي والكتابي، ولنجعل لغة الش .المشترك بيننا

ـير جـدا، الفترة السابقة التي قضيتها في كتابة هذا الكتاب كانت طويلة ب عض الشئ والوقـت قص كتابة كل التفاصيل التي وددت ذكرها في هذا الكتاب، لذلك وضـعت فـي -بصراحة شديدة –ولم استطع

دة اح ومـدخل لمسـائل عدـي عين اعتباري قدرة القارئ على التعلم الذاتي، حيث كان هدفي اعطائك مفـتـتندات ومراجـع وتركت الباقي عليك للبحث عن التفاصيل االخرى سواء فـي مواقـع ت او مس االنترـن

.NET Documentationالرسمية . ة جـادة Visual Basic .NET باستخدام NET.برمجة اطار عمل أليف ماهو اال محاوـل لـت

ه مـن كتاب عربي من مؤلف عربي وموجه الى مبرمج عربي لتقديم كل ما يحتاجه من معلومـات تمكـنـ ى اطـار عم ـتخدام لغـة البرمجـة NET Framework.ل بناء تطبيقات وحلول عملية موجه اـل باس

Visual Basic .NETا بتطـوير تطبيقـات مختلفـة ء، بد ا من توضيح اساسيات لغة البرمجـة وانتهاـئ وقـدمت مـا يرضـي ذوق هـذه اتمنى ان اكون قد وفقت في محـاولتي . داعمة للغة العربية المجاالت

!حظا سعيدا.. . المبرمج العربي

تركي العسيري 2003 فبراير –ن الظهرا

[email protected].

الفصل االول 1

Visual Basic .NETتعرف على

ة مـن Visual Basic .NETبسم اهللا نبدأ وعلى بركته نسير مع الجملة حرفـا 14، تتكون هذه الجمـل

، والنقطـة والحـروف Visual Basic االولى تعني لغة برمجة اسـمها 11ونقطة واحدة، الحروف اـل Visual لذلك، يمكننا ان نطلق على هذه اللغـة NET Framework.ني اطار عمل الثالث االخيرة تع

Basic for .NET Framework) اي لغة البرمجةVisual Basic الموجهه الى اطار عمل .NET

Framework.( ا مـع ـتكون Visual Basic .NETرحلة االلف ميل تبدأ بخطوة، وخطوتنا االولى في رحلتـن س

د اخـذ فكـرة مبسـطة فقبل. نظرية بحتة ان تبدأ بفرقعة اناملك لكتابة الشيفرات وبناء برامجك، من الجـي ومـا هـي الحاجـة ، وما الذي تقدمه لك، ومعرفة ماذا تعني هذه الحروفNET.عن الحروف الشهيرة

ت NET Framework. لالنتقال الى برمجة اطـار عمـل -أنت وأنا على االقل–التي تدعونا واذا كـنك السـابقة مـع عـالم من المبرم ع معاناـت جين المخضرمين، فسيكون هذا الفصل مصدر الفـراغ جمـي

البرمجة، اما ان كان هذا الكتاب اول كتاب برمجة تقرأه في حياتك، فاعتبر نفسك مبرمج محظـوظ جـدا NET.لما ستكتشفه من التعقيدات التي كانت تواجه المبرمجين قبل تقنية

NET.الحياة قبل

زمن لست هنا بص ك اـل دد تأليف كتاب تاريخ او التحدث عن بدايات ظهور الحاسبات الشخصية، ففـي ذـلرامج . لم اكن شيئا مذكورا اء الـب ولكن ما انا بصددة اآلن هو تقديم عرض مقتضب وسـريع السـاليب بـنـيكون حـديثي موجهـا لمبرمجـي نظـم DOSمنذ نظام التشغيل وحتى لحظة كتابة هذه السـطور، وس

Microsoftبشكل حصري .

DOSالبرمجة تحت نظم ـتخدم، واالمـر Input استخدام امر -كمبرمج-كان كل ماهو مطلوب منك لقنص المـدخالت مـن المس

Print ات ق العملـي لعرض المخرجات على الشاشة، باالضافة الى استخدام مجموعة من العبارات لتطبـيه كانت في الحقيقة برمجة سهلة وممتعة للمبرمج . الحسابية دعي اـن ين، حتى اصبح كل من هـب ودب ـي

.مبرمج، اال ان النتيجة كانت برامج متشابهة، ال جديد فيها وال تستخدم تقنيات جديدة

4 االساسيات: الجزء األولـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ــــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـ

ق بعد ذلك، ظهرت الحاجة الى التحليق الى مدى ابعد من االسلوب السابق، فكانت اهـداف التحلـيكالطابعـة، بطاقـة الصـوت، (هـاز التي تركب في الجDevices التفاعل مع االجهزة -بشكل مبدئي -

ات تابعـة )الخ...الفأرة ى بريمجـي ، اال ان اجنحة المبرمجين في ذلك الوقت كانت تعتمد اعتمادا كليا عـلع . Driversتسمى المشغالت ب Assemblyمعظم هذه المشغالت كانت تنجـز بلغـة التجمـي ، وتتطـل

ى ورق . خبرة كبيرة في التعامل مع المعالج وعتاد الكمبيوتر ائج عـل ع النـت امج يطـب فلو قمت بعمل برـنف صـوتي، الطابعة، فعليك ارفاق مشغل الطابعة مع البرنامج، واذا اردت من برنامجك أن يعـزف مـل

.عليك ارفاق مشغل الصوترمجين، اال ان المشـكلة -الى حد ما-قد تبدو فكرة ارفاق ملفات المشغالت مقبولة ـبعض المـب ل

ة .ها هي ان لكل طابعة مشغل خاص بها الحقيقة التي كنا نواجه وبما أنه ليس لدينا اي فكـرة عـن نوعـيع ا ارفـاق مشـغالت لجمـي واع الطابعة التي ستكون على طاولة المستخدم، فإن ذلك يفـرض عليـن اـن

ذي يعمـل تحـت نظـام Lotus 123فلو تذكر برنامج . الطابعات الموجودة في السوق ، MS-DOS اـلواع 200معه اكثر من ستعلم ان البرنامج يرفق ف اـن ملف، هذه الملفـات مـاهي اال مشـغالت لمختـل

بالنسبة لي، كنت افضل استخدام يدي لكتابة النتائج على الورق بدال مـن تحمـل تكـاليف نسـخ ! الطابعات .لوضع مشغالت الطابعات عليها) كانت غالية جدا في ذلك الوقت(االقراص

Windowsاالنتقال الى

فقد حلت المشكلة السابقة، بحيث يتكفل نظام التشغيل بمهمـة التعـرف Windowsتشغيل اما مع نظام ال على عتاد الكمبيوتر وارفاق مشغالتها، فهو يوفر لك امكانية الطباعة في برنامجك دون الحاجـة لمعرفـة

ـتخدام الفـأرة فـي مننوعية الطابعة، ويمكنك استخدام الصور والرسوم او عزف ملفات الصـوت او اسرمج -، اي كل ماهو مطلوب منك االجهزةبرنامجك دون االلتزام بارفاق مشغالت ى -كمـب ز عـل التركـي

ذاكرة، ادارة االقـراص اد، ادارة اـل دنيا كـاالجهزة والعـت برنامجك وصرف النظر عن االمور التقنية اـل .وغيرها، والتي يتكفل بها نظام التشغيل بكل اقتدار

ة ا تختلف اختالفWindowsاال ان البرمجة تحت بيئة ، DOS جذريا عـن البرمجـة تحـت بيـئـنص المـدخالت فبرنامجك لم يعد يستخدم الطرق التقليدية لقنص المـدخالت وعـرض المخرجـات، فق

ى شـكل رسـائل ك عـل كـالنقر Messagesاصبحت تتم من قبل نظام التشغيل، والذي يقوم بارسالها ـلClick الضغط على زر ،KeyDown... اة معظـم لذلك، . الخ ة فـي حـي انقلبت المـوازين البرمجـي

. الحلقات التكرارية لقنص هذه الرسائل-بل مئات-المبرمجين، لتصبح برامجهم تحتوي على عشرات ى Printاما من ناحية عرض المخرجات، فلم يعد هناك شـئ اسـمه الظهـار المخرجـات عـل

ـياقات رسـم وتسـجيل من المبرمجين انشـاء Windows طلب نظام التشغيلتيحيث الشاشة، نوافـذ وسة اول . طبقات ليتمكنوا من عرض المخرجات من خاللها دة لكتاـب فلو اراد مبرمج تعلم لغة برمجـة جدـي

، عليه كتابة عشرات السطور المعقدة جـدا لعمـل Windows تحت بيئة Hello Worldبرنامج شهير ـيارات االجـرة ذلك، االمر الذي ادى تقاعد المبرمجين من عالم المبرمجة وفضلو ا العمل عند شـركات س

Visual Basic .NETتعرف على : الفصل االول 5 ــــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـ

امج C بلغة ةالمعدالشيفرة ه وحتى اريك االمر الواقع، انظر إلى هذ .)!التاكسي( ل برـن يقـوم والتي تمـث :بعرض نافذة خالية فقط

#include <windows.h> LRESULT CALLBACK MainWndProc( HWND, UINT, WPARAM, LPARAM ); HINSTANCE ghInstance; int PASCAL WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow ) } WNDCLASS wc; MSG msg; HWND hWnd; if( !hPrevInstance ) { wc.lpszClassName = "ShowWindow"; wc.lpfnWndProc = MainWndProc; wc.style = CS_OWNDC | CS_VREDRAW | CS_HREDRAW; wc.hInstance = hInstance; wc.hIcon = LoadIcon( NULL, IDI_APPLICATION ); wc.hCursor = LoadCursor( NULL, IDC_ARROW ); wc.hbrBackground = (HBRUSH)( COLOR_WINDOW+1 ); wc.cbClsExtra = 0; wc.cbWndExtra = 0; RegisterClass( &wc ); } ghInstance = hInstance; hWnd = CreateWindow ( "ShowWindow", "ShowWindow", WS_OVERLAPPEDWINDOW|WS_HSCROLL|WS_VSCROLL, 0, 0, 600, 300, NULL, NULL, hInstance, NULL); ShowWindow( hWnd, nCmdShow ); while( GetMessage( &msg, NULL, 0, 0 )) { TranslateMessage( &msg ); DispatchMessage( &msg ); } return (int) msg.wParam; }

6 االساسيات: الجزء األولـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ــــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـ

LRESULT CALLBACK MainWndProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam ) { PAINTSTRUCT ps; HDC hDC; switch( msg ) { case WM_DESTROY: PostQuitMessage( 0 ); Break; default: return( DefWindowProc( hWnd, msg, wParam, lParam )); } return 0; }

ات شـركات ول مـن كبرـي ولو انهم صبروا لكان خيرا لهم، فبعد فترة ليست طويلة ظهـرت حـل

اختراع الكلمـة السـحرية Windowsصناعة البرمجيات لتهسيل عملية البرمجة تحت نظـم ك ـب ، وذـلVisual برنامجه بالفأرة، وكتابة بضعة اوامـر ) نوافذ(، فكل ما هو مطلوب من المبرمج تصميم شاشات

لقـد (يذها بمجرد قيام المستخدم بالتفاعل مع برنامجه سـواء بالفـأرة او لوحـة المفـاتيح او انفـه يتم تنف !).شاهدت فعال احد الزمالء يستخدم انفه على الشاشة

بعد ذلك، الحظ المبرمجون ان نسبة كبيرة من شيفرات برامجهم مكررة وقد كتبت فـي عشـرات ر فـي Windows ان معظم تطبيقات المشاريع، فلو امعنت النظر قليال، لوجدت تتشارك الى حـد كبـي

ات ومشـاركة Windowsمعظم وظائفها الشائعة، لذلك كان على مطوري نظام ايجاد حلول لتبادل البياـنرامج ع ـب ـبعض الوقـت، الن جمـي ـتحيال ل دا مس الشيفرات بين البرامج، اال ان تحقيق هذا الهـدف ـب

Windowsة تعمل في مناطق مختلفة ومستقل ذاكرة تسـمى مسـاحات العنوـن Addressة بها في اـلSpaces لذلك أسس مطوروا ،Windows اسلوبا او بروتوكول برمجـي يسـمح للتطبيقـات بالتخاطـب

ـية تسـمى Dynamic Dataالتبـادل الـديناميكي للبيانـات فيما بينها بمعـايير ومواصـفات قياسExchange -) DDE(. رة كانت بها الكثير من ا DDEاال ان ـتخدامها، ككـث ب اس لعيوب التي حدت بالمبرمجين إلى تجـن

ى صـعوبة االنهيارات التي تحدث في البرامج، واالتصاالت دائمة االنقطاع بين التطبيقات، باالضـافة اـلربط الكائنات وتضـمينها باصدار تقنية Microsoft ان قامت إلىوتعقيدات الشيفرة المصدرية وغيرها،

Object Linking & Embedding -) OLE( والتي تعتمد في بنيتها التحتية على DDE، ث حـي Microsoft من ادراج جـدول مـن كتمكنل المختلفةوفرت قابلية لتبادل البيانات بين البرامج والتطبيقات

Excel لتضمينه او ربطه في مستند Microsoft Word. ـ OLE البنية التحتية ـل Microsoft غيرت 1993في اواخر عام ى حي م تعـد تعتمـد عـل ث ـل

DDE وتم اعادة بنائها من جديد لتصدر ما سمي OLE2 ق اسـلوب ، والتي مكنت المبرمجين مـن تطبـي وانت فـي داخـل Excel بحيث يمكنك تحرير جدول In-place Activationالعمل في نفس المكان

.Word في نفس النافذة ودون الحاجة لمغادرة Wordمستند

Visual Basic .NETتعرف على : الفصل االول 7 ــــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـ

COMالحلم اصبح حقيقة مع رامج تحـت ة Windowsمن االنجازات التي احدثت ثورة كبيرة في عـالم تطـوير الـب برمجـة ، تقنـي

بلغـات –، حيث مكنت هذه التقنية المبرمجين )Component Object Model - )COMالمكونات ـيس هـذا . Object Orientedكائني التوجه باسلوب م من المشاركة في تطبيقاته-البرمجة المختلفة ل

ى فقط ، )Distributed COM -) DCOMالمكونـات الموزعـة ، بل تعدى االمر ذلك ليصل اـلق ات عـن طرـي ـبكة لتصبح مكونات البرامج موزعة على اجهزة مختلفة، ويتم تبادل البياـن ت ش االنترـن

امجي الموجـود فـي جهـازي منغوليابشكل مذهل، فيستطيع صديقي في من استخدام بعض اجزاء برـن .الربع الخاليصحراء صطحبه معي في رحالتي البرية بالمحمول الذي ارامج تحـت COMاثرت ، لدرجـة ظهـور Windows بشكل ايجابي كبير في عالم تطوير الـب

ات ـتحكم (COMشركات متخصصة فقط في تطوير مكوـن ات ActiveX Controlsكـأدوا ال ، مكتـبى ، واصبحت عملية بناء البرامج تعتمد ع)الخ ....ActiveX DLLفئات البرمجـة مكونيـة التوجـه ـل

Component Oriented Programming بشـكل كبيــر، وال تكـاد تجـد أي برنــامج اآلن إال .COMويستخدم مكونات

ب COMمع ذلك، فإن استيعاب البنية التحتية لبرمجة المكونات مسالة صعبة جـدا، فهـي تتطـلرة االخطـاء والشـوائب Interfacesالواجهـات التوغل في تفاصيل معقدة الستخدام ما يسـمى ، وكـث

فحـدث وال System Resources البرمجية اصبحت امرا طبيعيا، وعند الحديث عـن مصـادر النظـام ات المشـأة، حرج، فهي تستهلك الكثير من المساحات الغير مستخدمة لعدم تفريغ اجزاء الذاكرة من الكائـن

ـتخدمها اما بسبب االنهيارات المفاجئة للبرامج، او نسيان حذف ي انشـأها أو اس ات الـت مؤشـرات الكائـن .البرنامج

ى مسـجل النظـام COMمن ناحية اخرى، فإن مكونات ا عـل Windows تعتمد اعتمـادا كلـيRegistry ن ة فـي الجهـاز، وـل ات المثبـت ، واي مشكلة تحدث في هذا المسجل تؤثر على باقي المكوـن

رامج بحـد ذاتهـا . لبرامج التابعة لها اReinstallتستطيع استخدامها اال باعادة تركيب وعملية تركيب الـبوالتحقـق مـن معقدة جدا، اذ تتطلب منك نسخ ملفات المكونات ومن ثم تسجيلها في المسـجل واعـدادها

ت (ومن ثم تعريفها على الشبكة المحلية االصدارات االقدم ة )DCOMان كاـن ، واي خطـأ فـي عملـية فـي تثبيت البرامج، يؤدي الى حدوث كارث رامج المثبـت اقي الـب ى ـب أثير عـل ة في جهاز المستخدم والـت

ة، فـال . القرص الصلبFormatالجهاز، ليكون الحل الوحيد اعادة تهيئة وعند الحـديث عـن التوافقـيـيس هـذا مجـال Versioningيمكنك استخدام اصدارين مختلفين لنفس المكون بسبب مشـكلة تسـمى ل

.تفصيلها

تحديات االنترنتهور االنترنت اصبحت مسألة تكامل التطبيقات مع هذه الشبكة امر ضروري ان لم يكـن الزامـي، مع ظ

ت، اضـف ق االنترـن فعمليات تحديث البرامج وتبادل البيانات فيما بينها يمكن ان تخفض تكاليفها عن طرـيى المع -حول العـالم –الى ذلك مدى السهولة التي تمكن مستخدمين الكمبيوتر لومـات مـن الوصـول اـل

8 االساسيات: الجزء األولـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ــــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـ

ل تعـدى االمـر . بالتصفح في المواقع المختلفة هذه الشبكة لم يحصر مجالها في عرض المواقع فقط، ـبى ات معالجـة الصـفحات عـل ـتخدام تقنـي اكثر من ذلك الى ان يصل لمستوى تطوير تطبيقات ويب باس

.)Active Server Pages -) ASPاجهزة الخوادم كتقنية ب عشـرات التنقيحـات ASPبيرة باستخدام مع ذلك، فإن تطوير النظم الك امر معقد جدا، ويتطـل

ث انهـا OOP ليست كائنية توجـه ASPوالتعديالت للصفحة الواحدة، خاصة ان علمت ان برمجة ، حـي . لكتابة شيفرات الصفحاتVBScriptكانت تعتمد على لغة البرمجة المصغرة

ى ت COM لبرمجة المكونات ASPاال ان دعم صفحات ر ادى اـل كامـل حقيقـي وتسـهيل اكـبـتخدمون مـن تطـوير تطبيقـات –ومرونة اكثر في تطوير النظم ـتمكن المس متعـددة خاصة الكبيرة، لي

ات nTied Applications اتالطبق ى كائـن ة النظـام الدارة قواعـد ADO حقيقية، تعتمد عـل كخلفـيل واجهـة لتASP الداء وظائف النظـام كطبقـة وسـطى، وصـفحات COMالبيانات، ومكونات مـث

.المستخدمين انتشارا كبيرا بين المواقع العالمية، اال ان المشكلة التي واجهت مطوري نظـم ASPانتشرت نظم

ع المـادة ت تصـمم موقـع لبـي ويب تظهر عند تبادل وتشارك البيانات بين المواقع المختلفة، فمثال لو كـنف واردت من هذا ) الطعمية(الخام المستخدمة في انتاج الفالفل ات مـن مختـل ـتقبل الطلـب النظام ان يس

الدول العربية، وعلى االرجح ستتم عملية الشراء بالعملة المحلية للدولة، اضف الى ذلك مسـألة التسـعير اج حيث انها تعتمد اعتمادا كليا على القوة الشرائية لعملة تلك الدولة، وسوق المطـاعم المنافسـة فـي انـت

ك السـعر المناسـب فـي سندويتشات الفالفل، لذلك قد ت حتاج الى تبادل البيانات مع مواقع اخرى تحدد ـل .وقت معين، ومواقع اخرى تمكن المستخدمين من مراقبة عمليات شحن الفالفل وبيان مواقعها الحاليةـتم بارسـال صـفحات HTMLان اردت تبادل البيانات مع هذه المواقع بشكل تقليدي، فالعملية ت

ـيق (Tagsك القيام بجميع الخطوات الالزمة لحذف الوسوم من موقع الى اخر، وعلي ـتخدم لتنس ي تس الـتل .، وهذه بحد ذاتها عملية معقدة جدا، وتتطلب جهد ووقت اضافي )HTMLصفحات ليس هذا فقـط، ـب

ان اي تعديل بسيط في صفحات احد المواقع قد يؤدي الى كارثة في عملية نقل البيانات وعدم دقتهـا وقـد !ن تكون الطلبية فالفل ويتم شحن سندويتشات كبدة بلدييصل االمر ا

ث )Simple Object Access Protocol –) SOAPلذلك اعتمد المطورون على تقنية بحـيات كــ (XMLيتم نقل البيانات عن طريق لغة ) HTMLوهي لغة وصف البيانات وليس تنسيق البياـن .TCP/IPواستخدام بروتوكوالت االتصال

ة معقـد جـدا، -مع االسف الشديد- ممتعة جدا، ولكن SOAPة قد تكون فكر استخدام هذه التقنـيرفين فقـط، كـذلك ويتطلب الكثير من الخبرة البرمجية، بحيث انحصر استخدامها على المبرمجين المحـت

. امر ال مفر منهSOAP في تطوير نظم تعتمد على Bugsكثرة االخطاء والشوائب البرمجية

الداء الوظائفعشرات التقنيات كما رأيت في الفقرات السابقة، فإن تطوير البرامج مسألة معقدة جدا وتتطلب دراية كافية في التعامل مـع

ل (VBScriptلكي تطور مواقع ويب ديناميكية عليك تعلم فالتقنيات المختلفة، ) ان كانت من جهـة العمـي

Visual Basic .NETتعرف على : الفصل االول 9 ــــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـ

ك اتقـان لغـات ، وان اردت بناء نظم ق)ان كانت من جهة الخادم (ASPوتعلم واعد بيانات عمالقـة علـيـين للكفـاءة T-SQLاالستعالم ، وان اردت تطـوير Optimization للحصول على اكبر قدر من تحس، ++Visual C بفاعلية اكثر ودون حدود عليك تعلم احد لغات البرمجة المتقدمـة كــ COMمكونات

ـتخدام الشهيرة فال مMicrosoft Officeوان اردت مخاطبة تطبيقات ك اال باس ، امـا ان VBAخرج ـلـتجد ضـالتك فـي Windowsاردت تطوير برامج تعمل تحت نظم بسهولة وكسر حـاجز الوقـت فس

Visual Basic. ات ـثال التقنـي ديك م ، ADOليس هذا فقط، بل حتى الوظائف المتشابهه تنجز بتقنيات مختلفـة، فـل

DAO و ،RDO انات لتطوير التطبيقات المعتمدة على قواعد البيDatabases اك ايضـا مجموعـة ، وهـنى الصـور والرسـوم OpenGL، و GDI ،DirectXمن التقنيات كـ ي تعتمـد عـل لتطوير النظم الـت

.بكثرةات كانت هذه جولة سريعة حول بناء البرامج في السنوات السابقة، تذكر ان كالمـي موجـه لتقنـي

Microsoft ـيبك ان لم تكن لديك اي معرفة بما سبق ذكر و. فقط ه من تقنيات برمجية، فـأرجو ان ال يصك ـتبدأ حياـت ث س ذلك باالحباط، بل على العكس من ذلك، يمكنك أن تعتبر نفسك مبرمج محظوظ جدا، حـيالجديدة من حيث انتهى اآلخرين، ومع احدث وافضل تقنية تستخدم لتطوير التطبيقات فـي القـرن الحـادي

.Microsoft .NETوالعشرين وهي

NET. دالحياة بع

ال ادعي هنا علم الغيب ووصف مستقبل تطوير التطبيقات، ولكن يمكنك اعتبار ما ساذكره فـي الفقـرات . وبيان مدى تاثيرها على صناعة البرمجياتNET.التالية عرض سريع الستراتيجية

االستقاللية عن منصات العمل

ة : لعمل المختلفـة اكتب البرنامج مرة واحدة فقط وسيتم تنفيذه على مختلف منصات ا كـاالجهزة المحموـلNotebooks خادمـات ،Servers ة ف جواـل ة Mobiles، هواـت ات رقمـي ، Digital TV، تليفزيوـن

ت شـخص تسـكن فـي . Digitalثالجات، طائرات، ابواب كراج، سيارات، وكل شئ رقمي وان كـنـيفرة مصـدرية مـن الوا امج منطقة بعيدة عن عائلتك وال تجيد الطبخ، فيمكنك طلب ش ة برـن دة لكتاـب ـل

وهـذا بفضـل . النجـاز الكبسـة ) الذي سيكون رقمي الحقـا (لتحظير الكبسة ومن ثم تركيبه في الفرن NET. استقاللية برامجك عن منصات العمل الذي تقدمه

فقط، بل تشـمل نظـم التشـغيل Hardware االستقاللية عن منصات العمل ال تنحصر حول العتاد ا قـد Windows يمكنها ان تعمل على مختلف اصدارات نظام التشغيل المختلفة، فحاليا برامجك ، وقريـب

ى Linux سيدعم في انظمة التشـغيل االخـرى كــ NET Framework.نرى ان اطار عمل وحـتMac.

ى -كمبرمج–النتيجة االيجابية من استقاللية برامجك عن منصات العمل تقتضي منك ز عـل التركـيعالم الخارجي او المكان الذي سيتم تنفيذ البرنامج فيه، مع ذلك قـد تسـال برامجك فقط بغض النظر عن ال

10 االساسيات: الجزء األولـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ــــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـ

ذ الوظـائف المختلفـة : سؤال بديهي وتقول ـيتم تنفـي ان كانت برامج مستقلة عن منصات العمل، فكيف سذي تصـممه، امج اـل والتي ال تتوفر في منصة عمل معينة، والجواب بكل بساطة يعتمد على نوعية البرـن

س ) تحضير الكبسة(الشيفرة المصدرية لبرنامج الوالدة فبكل تأكيد لن تقـوم بتشـغيله فـي غسـالة المالـبـية . ، وانما موجهه الى الفرن الرقمي)التي ستكون رقمية ايضا ( لذلك اريد توضيح ان المقصـد مـن قض

رمج اي NET Framework.استقاللية البرنامج عن منصات العمل ميزة من اطار عمـل ـيس للمـب ول .ة مباشرة بها، فكل ماهو مطلوب منه كتابة البرنامج فقط بحيث يالئم البيئة التي سيعمل بهاعالق

.NET نسخة محسنة من COM

الي مـن COM 2.0 كان يسمى NET.قد تفاجأ ان اخبرتك ان االسم االبتدائي لمشروع ل الـت ، اي الجـي NET. و COMفالفكرة مـن . ريوهذه بحد ذاتها حقيقة ان اخذتها بشكل نظ ، COMبرمجة المكونات

من منطلق توزيع الشيفرات واالستقالية الشبه تامة عـن منصـات العمـل، اال ان -نظريا–تقريبا متطابقة .NET تختلف اختالفا جوهريا كبيرا في بنيتها التحتية عن COM ة ث ان تقنـي م اعـادة NET.، حـي ـت

. سابقاCOMهت مبرمجي بنائها من جديد وعولجت العشرات من المشاكل التي واجث ان System Registryاول مشكلة ابتدائية تم حلها هي االستغناء عـن مسـجل النظـام ، حـي

ى المـرور بمسـجل NET.مكونات تصل اليها وتستعلم عنها مباشرة عن طريق ملفاتها، دون الحاجة اـلرامج ال COMالنظام كما كنا نفعل سابقا مع ت الـب ب جهـد اضـافي ، وهذا يعني ان عملية تثبـي تتطـل

ة امج دون أـي ـيعمل البرـن النجازها، فيكفي نسخ الملفات من القرص المدمج الى القـرص الصـلب وسكوضع الملفات فـي اماكنهـا (مشاكل، مع ذلك قد تحتاج الى برامج التركيب لتنفيذ بعض اللمسات الخفيفة

).الخ....لية تنفيذ البرنامج المناسبة، تخصيص العناصر المطلوب تثبيتها، اعدادات بسيطة قبيل عمث فـي نظـام التشـغيل DCOMوبالنسبة للمكونات الموزعة Windows فلن تحتاج الى العـب

ات ـتم توزيعـه، اذ ان مكوـن هـي NET.ومحتويات المكون لتجري عشرات االعدادات االضافية حتى ي .موزعة بحد ذاتها

ـين مـن فلن تحدث بعد االن، ح Versioningأما مشكلة التوافقية يث يمكن تثبيت اصدارين مختلف .نفس المكون دون ان يؤثر احدهما على االخر

الوراثـة وهي COM لم تكن مدعومة سابقا مع مكونات NET.في مكونات ميزة عظيمة أخرى Inheritance فمكونات ،COM ات NET. لم يكن متاحا اشتقاقها وراثيا وتطوير فئاتهـا، امـا مكوـن

.ة الشتقاق فئات المكونات وراثيا دون الحاجة للحصول على شيفراتها المصدريةفلديك القدرة الكامل كانت تزيل حاجز الفروقات بين لغات البرمجة المختلفـة، اال ان هـذا COMصحيح ان مكونات

) Visual Basicكــ (الحاجز لم يتم ازالته بشكل كامل، فمـا زال مبرجـوا بعـض لغـات البرمجـة كــ ( المنجزة بلغـات متقدمـة اخـرى COM في استخدام بعض مكونات يواجهون مشاكل وصعوبات

Visual C++ ( خاصة مع المكونات التي تتعامل مع انواع بيانات ليست مدعومـة فـيVisual Basic امست كل هذه التعارضـات مـن الماضـي، NET.، ولكن مع مكونات ) مثال Pointersكالمؤشرات (

. كما سترى الحقاCRLبفضل معايير موحدة NET.ومرد ذلك ان جميع لغات

Visual Basic .NETتعرف على : الفصل االول 11 ــــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـ

تكامل لغات البرمجةـ NET.جميع لغات يمكـن اضـافة Visual Basic .NET متكاملة فيما بينها، فبرنامجك المصمم ـب

ل يمكـن Visual C# .NETبعض العناصر والشيفرات المصدرية إليه من لغـة دون اي مشـاكل، ـبـ ل للمشروع الواحد ان يدمج شيفرات مصدرية من لغ ، Delphi .NET ،Java .NET: ات متعـددة مـث

Visual C++ .NET، Turki .NET) إن وجدت(، Fortran .NET ،... الخ وذلك بفضـل معـاييرCRLالتي توحد لغات البرمجة .

ر م اكـث قد تتسائل وتقول، ما دامت لغات البرمجة المختلفة موحدة بهذا الشكل فما الفائدة مـن تعـلي من لغة؟ والجواب هو انه زات خاصـة بهـا، واعـن ما زالت كل لغة برمجة تحتوي على سمات وممـي

ل هـذه NET.بكلمة خاصة بها في هذا السياق هو عدم امكانية تكاملها مع لغات م تفعـي االخـرى ان ـتع لغـات . المزايا ى لغـة NET.من ناحية اخرى، جمـي ـتم تحويلهـا اـل لحظـة الترجمـة MSIL ي

Compilingكما سترى الحقا .

ت ويب هي مستقبل االنترنتخدماى المتصـفح ـيه عـل ا نقض Browserمنذ ان نشبك سلك الهاتف ونتصل باالنترنت، فـإن معظـم وقتـن

ك بعـد للوصول الى المواقع المختلفة، الفعل السابق سيكون من اساطير االولين في المستقبل القريب، وذـلت بطـرق حيث ستغير الكثير من اسلوبWeb Servicesانتشار خدمات ويب تعاملنا مع شبكة االنترـن

ا حـول برمجة ويبالجزء الخامس . لم تخطر على بال انس وال جان من هذا الكتاب يقدم لك شرحا وافـي . بشكل سريعWeb Serviceخدمات ويب، ولكن دعني هنا اعرف لك ماهي خدمة ويب

ـتقبل طل ) XML Web Serviceتسمى احيانا (خدمة ويب ات ماهي اال برنامج يس Requestsـبـية، XML تحـت معـايير لغـة TCP/IP باستخدام بروتوكول Responseومن ثم يستجيب لها القياس

ات فيمـا بينهـا وانجـاز ااألعمـال ادل البياـن وبذلك تتمكن ماليين المواقع المنتشرة حول العالم مـن تـبـبكة يمكنك اعتبار خدمات ويب على انها برنامج يتصـل بالعـالم الخـارجي . المطلوبة ق ش عـن طرـي

رة XMLاالنترنت مما يمكنك من ارسال واستقبال البيانات بصيغة ك اي خـب دون ان يتطلب االمـر مـن كـل مـا NET Framework.، حيث يوفر لك اطار عمل TCP/IP او بروتوكوالت XMLفي لغة

.تحتاجه لتطوير وبناء خدمات ويبشـبكة سنوفر خدمة ويب فـي موقـع (رنت، ستنتشرخدمات ويب انتشارا المثيل له في مواقع االنت

ب ) بمشيئة اهللا المطورون العرب ى خـدمات وـي ، بل ستصل الى تغيير معظم االنظمة الحالية لتعتمـد عـلي بالمواعيد، للتذكيروتصبح مؤجرة، فيمكنك مثال توفير خدمة ويب او خدمة توفير اسعار العمـالت الـت

دروس ومقاالت مـن موقـع اخـر، او خدمـة بحـث الحصول علىتحدث على مدار الساعة، او خدمة .الخ ...Google Searchكخدمة

12 االساسيات: الجزء األولـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ــــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـ

ماذا عن المبرمج العربي؟ة، NET Framework.اطار عمل اختالف لغـاتهم الطبيعـي موجه الى جميع المبرمجين حول العالم ـب

ـ UNICODEواللغة العربية احدى هذه اللغات، فالنصوص مثال جميعها تتبع الترميز ع محـارف وتوزية، ـيق العمـل ة كتنس لوحات المفاتيح العربية مأخوذ في عين االعتبار، كذلك الحال مـع مواصـفات البيـئ

ـتثناء ...الوقت والتاريخ، االرقام، نظام الفرز مـع االسـف -الخ، فهي مدعومة لجميع الدول العربية باسـتندات السودان، فلسطين، جيبوتي، الصومال وموريتانيا فلم اجدها في-الشديد ط مس NET. احـد رواـب

Documentationالرسمية . د فـي Mirroringوعند الحديث عن المسائل التقنية االخرى، فتقنية المرآة مدعومـة بشـكل جـي

ـبة )Windowsتطـوير تطبيقـات كما سترى في الجزء الثالث (Windows Formsنماذج ، وبالنسك HijriCalendarClassالفئة NET Framework.للتاريخ الهجري فيوفر لك اطار عمل التي تمكـن

ـبط القيمـة الصـحيحة من استخدام التاريخ الهجري في برامجك وتوفر لك طرق وخصائص لتعديل وض .لليوم والشهر

ع، لتنحصـر Microsoftباختصار، وفرت ة بشـكل راـئ منصة تطوير قوية تدعم اللغـة العربـية -او مطورون عربسواء في شركات عربية –المسؤولية علينا نحن كعرب ول الفعاـل لتقديم كافة الحـل

.للمستخدم العربي

NET Framework.محتويات اطار العمل

ي ان اقسـم NET Framework.واالن سيتمحور حديثي حول معمارية ومحتويات اطار عمـل ، يمكنـنك – فضلت تقليص العدد ي طبقات، ولكن10لك محتوياته الى اكثر من ـ -للتسـهيل علـي رى ف ي كمـا ـت

:)1-1الشكل (

NET Framework. محتويات اطار عمل :1-1شكل

ات (Base Class Libraryمكتبة فئات ة فـئ NET Framework Class.تسمى ايضا مكتـب

Library ( هي عبارة عن مئات الفئات الموجودة في عشرات ملفاتDLL ه ـيل ـل ا يس تعتبر كنزا غالـي

Visual Basic .NETتعرف على : الفصل االول 13 ــــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـ

ات لعاب المبرمجين الجادين، حيث تحوي كل دءا بتقـديم فـئ ما تحتاجه النجـاز برامجـك ومشـاريعك ـبـية ى ادارة خـرج ودخـل الملفـات ) String ،Integerكــ (لوصف البيانات االساس I/O Fileاـل

Processing مسارات التنفيذ ،Threading الصور والرسوم، نمـاذج ،Windows Forms نمـاذج ،Web Forms االتصال بقواعد البيانات ،ADO .NETغيرها الكثير و.

ع Common Language Runtimeبالنسبة للغة التنفيذ المشتركة فهي موحـدة لمعـايير جمـيذاكرة NET.لغات ات ادارة اـل ، Memory Management االخرى، كما انها المسـؤولة عـن عملـي

ذ Garbage Collectionتفريغ مصادر النظام باستخدام Exception Handling، اخطاء وقـت التنفـي ).سأتحدث عن كل ما ذكرته في الفصول الالحقة من هذا الكتاب(

ت اطـار عمـل ه هـو NET Framework.اخيرا، نظام التشغيل الذي يمكنك مـن تثبـي علـيWindows ولكن قد ترى في القريب العاجـل نظـم تسـغيل اخـرى )لحظة كتابة هذه السطور ( فقط ،

.داعمة له

JITالترجمة على الفور NET. في عـالم برمجـة -في رأيي الشخصي-ء التي ستكتشفها والتي تعتبر فتح كبير من اجمل االشيا

وهي تقنية تقوم بترجمـة ،)Just In Time Compiling -) JITالترجمة على الفور هو اسلوب ه ـتج عـن البرنامج عند تنفيذه حيث ينتج افضل شيفرة تتناسب مع الجهاز الذي سيعمل عليه البرنامج مما ين

ف يحـدث Optimizationايجابية جيدة جدا، هذا عند الحديث عن تحسين الكفاءة نتائج م كـي ، وحتى تعـل :)2-1الشكل (ذلك تابع

. مراحل ترجمة وتنفيذ البرنامج:2-1شكل

ل ـيتم تحوـي اختر اي لغة تناسب مزاج اناملك واكتب الشيفرة بها، وعند قيامك بعملية الترجمـة س

ـ ة ملف البرنامج الى ملف ش دة اسـمها Executable Fileبيه بالملفـات التنفيذـي وب بلغـة جدـي مكـت

14 االساسيات: الجزء األولـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ــــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـ

Microsoft Intermediate Language ) تختصـرIL او MSIL( . ـيفرات ى ش وي عـل ث تحـت حـيث يقـوم بترجمـة JITالبرنامج ولكنها غير قابلة للتنفيذ مباشرة، بل يشترط وجود مترجم على الفور حـي

دما تصـمم هذا الملف الثنائي الى لغة اال لة معطيا افضل التعليمات بحيث تناسـب الجهـاز الحـالي، فعـن فاعلم ان البرنامج سيستفيد من كـل مصـادر Visual Basic .NETبرنامجك مرة واحدة فقط باستخدام

ى Serverالعتاد ونظام التشغيل الذي يتم تنفيذ البرنامج فيه، اي لو شغلت برنامج تحت خـادم وي عـل يحـتم 9504378250470592 ك ـل معالج فثق ثقة تامة ان برنامجك سيستفيد من كل هذه المعالجات رغم اـن

.تهتم بهذه النقطة على األرجحـتدعاء وظيفـة JITعملية الترجمة د اس تقوم بترجمة كل جزء من البرنامج عند الحاجـة اي عـن

رجم اخـر Nativeيسـمى معينه فيه، ويمكنك ترجمة البرنامج من اوله الى اخره ايضا عن طريق مـتImage Generator –) NGEN() يسمى ايضاPre-JIT Compiler ( ـتم مع معرفة ان الترجمـة ت

مرة واحدة فقط، ولن يشعر المستخدم بأي بطء في عملية تنفيذ البرنامج عند تشـغيله مـرة اخـرى، فقـد .تمت ترجمته بالشكل المناسب لجهازه

Assembliesالمجمعات امج ) DLL او EXEقد يكون (هو اال ملف ما Assemblyالمجمع ق بالبرـن يحتوي على كل شئ يتعـل

Resource، الصور والرسوم، ملفـات المصـادر Compilingسواء شيفراته المصدرية بعد الترجمة

Files صفحات ،HTMLكل هذه العناصر يمكنك ان تضعها جميعا في ملف واحد فقط. ، وغيرها. ك يمكـن للمجمعـات في اغلب االحوال، يمثل المجمع ان Assembliesبرنامج واحد، مـع ذـل

امج آخـر -بعبارة أخرى-اي تحتوي على مجمعات اخرى، ه برـن - يمكن لبرنامجك ان يدمج في داخـل .Assemblies المجمعاتما سترى الحقا في الفصل الحادي عشر ك

ـ ديث عنهـا اخيرا، كل ما ذكرته من جمل وعبارات مبهمة فـي الفقـرات السـابقة، سـاعود للحبالتفصيل الممل في باقي فصول هذا الكتاب، فلست بحاجة الن تكون مستوعبا لكل شـئ اآلن، اذ ان كـل

NET Framework.ما كنت اريدة اآلن هو تقديم جولة سريعة حول محتويات اطار عمل

Visual Studio .NETبيئة التطوير

ق )شرح بيئة التطوير بالتفصيلوالتي تبدأ ب(قد اغير العرف المتبع في كتب البرمجة ، ولكـن مـن منطـلى -الذي يقرأ كتابي–ايماني الشديد بان الشخص ه قـد وصـل اـل هو مبرمج وليس مستخدم، فاعتقـد اـن

زي . مرحلة تمكنه من تعليم نفسه ذاتيا الستخدام بيئة التطوير ا عزـي ك العـذر الشـديد ـي لذلك، التمس مـنة القارئ في مسالة شرح بيئة التطوير، ف ات البيـئ ـبعض محتوـي . لن تجد هنا اال عرض سريع ومختصر ل

.مع ذلك، قد اتطرق في فصول الحقة الى تفصيل بعض النوافذ متى ما دعت الحاجة لذلك ++Visual Basic .NET ،Visual C#.NET ،Visual C( تتشارك معظم لغات البرمجة

.NETفي بيئة تطوير متكاملة من ) وغيرهاMicrosoft تسمى Visual Studio. NET وفر ، حيث ـتات . لك كل ما تحتاجه من خدمات وادوات في قمة الروعة تسهل لك حياتك البرمجية ع محتوـي شرح جمـي

Visual Basic .NETتعرف على : الفصل االول 15 ــــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـ

Visual Studio .NET كتاب كامل، وقد اصدرت بالفعـل -دون مبالغة– يتطلب Microsoft Press ذي ت ق بلغـة البرمجـة كتابا يشرح كل صغيرة وكبيرة حول هذه البيئة، اما الكتاب اـل قـرأه فهـو يتعـل

Visual Basic .NETفقط، ولن اذكر اال النوافذ واالدوات التي ستستخدمها باختصار هنا .

نوافذ بيئة التطوير، )3-1شـكل ( Start Page الول مرة، مستظهر لك النافـذة Visual Studio .NETعند تشغيل بيئة

ك تستطيع الوصول الى اخر مشاريع تم فتحها او ان شاء مشاريع جديدة عن طريق هـذه النافـذة، كمـا اـنـ ار المتعلقـة ـب ى اخـر االخـب رابط NET Framework.تستطيع الوصول اـل ى اـل بالضـغط عـل

Headlines وذلك الن النافذة Start Pageماهي اال صفحة ويب تقليدية .

.Visual Studio .NET الشاشة االفتتاحية لبيئة التطوير :3-1شكل

:Optionsة الخيارات نافذ

ك )4-1الشكل ( يؤدي الى ظهور هذه النافذة Tools من قائمة Optionsاختيارك لالمر ث تمكـن ، حـيـيفرات، ة التطـوير، محـرر الش ارات كاعـدادات بيـئ من تخصيص واعداد عشرات االوضـاع والخـي

ـيح Database، قواعــد البيانــات Compilersالمترجمـات حات ، محــرر صــفDebugging، التنقHTML مصمم نماذج ،Windows Formsوغيرها .

16 االساسيات: الجزء األولـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ــــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـ

.Options نافذة الخيارات :4-1شكل

:Class Viewنافذة عرض الفئات

امج ى شـكل شـجري Project Classes الغرض الرئيسي من هذه النافذة هو عرض فئات البرـن عـلـيفرة ، مع العلم ان الفئات التي تعرض في هذه النافذة هي الفئات )5-1الشكل ( ي تعرفهـا فـي الش الـت

ـتم تضـمينها فـي نفـس المصدرية للمشروع الحالي فقط، فال تتوقع ظهور فئات من مكتبات اخرى لم ي .المشروع

Class View نافذة عرض الفئات :5-1شكل

ة الضغط المزدوج على عنصر من عناصر هذه الشجرة، يؤدي الى فتح نافذة المحرر ونقل مؤشـر الكتاـب

Cursorاختر االمـر . لى منطقة تعريف الفئة او العضو في الفئة اClass View مـن قائمـة View .لعرض هذه النافذة

Visual Basic .NETتعرف على : الفصل االول 17 ــــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـ

:Solution Explorerحل لنافذة مستكشف ا فئات المشروع الحالي، فان نافذة مستكشـف الحـل تعـرض ضان كانت نافذة عرض الفئات السابقة تعر من قائمـة Solution Explorerاختر االمر . )6-1شكل (رى ملفات المشروع الحالي والمشاريع االخ

Viewلعرض هذه النافذة .

Solution Explorer نافذة مستكشف الحل :6-1شكل

: ، يقصـد بهـذه المراجـع Referencesفي اعلى شجرة ملفات المشروع تالحظ وجود عنصر المراجع

زر الفـأرة المكتبات الخارجية التي تريد تضمينها في المشروع ال ى فئاتهـا، انقـر ـب حالي والوصول اـل من القائمة المنبثقة، لتظهر لك نافـذة المراجـع Add Referenceااليمن على هذا العنصر واختر االمر

.)7-1شكل (

.Reference نافذة المراجع :7-1شكل

18 االساسيات: الجزء األولـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ــــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـ

.يمكنك اضافة او حذف المراجع من هذه النافذةمع انه

:Project Property Pages نافذة خصائص المشروعق هـذه النافـذة، عند البدء في انشاء مشروع جديد، ينصح دائما بتعديل اعدادات المشروع اوال عـن طرـي

-1شـكل (تستطيع الوصول لها بالنقر بزر الفأرة االيمن على عنصر المشروع في نافذة مستكشف الحل ب اسـم )8-1شـكل (ظهر هذه النافذة من القائمة المنبثقة لت Properties ومن ثم اختيار االمر )6 اكـت

.Assembly Nameالمشروع الحالي تحت خانة

. نافذة خصائص المشروع:8-1شكل

:نافذة مستعرض الكائنات

ات معرفـة فـي لهااذا اردت معرفة جميع الفئات والتركيبات واالعضاء التابعة ت هـذه الفـئ سواء كاـن View->Other، فـاختر االمـر Referenceمراجـع المشروع الحـالي او مضـمنة مـن قائمـة ال

Windows->Object Browser 9-1الشكل ( لعرض نافذة مستعرض الكائنات(

Visual Basic .NETتعرف على : الفصل االول 19 ــــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـ

. نافذة مستكشف الكائنات:9-1شكل

:Code Editorنافذة محرر الشيفرة

ة النق IntelliSense قائمة )10-1الشكل (توفر نافذة محرر الشيفرة "." طـة والتي تظهر بمجـرد كتاـبى لنقـل المؤشـر بعد اسم الكائن لتعرض جميع اعضائه، كما توجد في اعلى نافذة المحرر قائمتين االوـل

د ايضـا، يمكـن . الى الفئات والوحدات البرمجية في الملف الحالي، والثانية للطرق والخصـائص المزـي . في يسار النافذةالموجودة"+" اخفاء جزء من الشيفرات المصدرية واظهاره بالضغط على الرموز

. نافذة محرر الشيفرة:10-1شكل

20 االساسيات: الجزء األولـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ــــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـ

ة ) الخ....كالخطوط، االلوان، المحاذاة (يمكنك تخصيص وتغيير اعدادات هذه النافذة ى خاـن باالنتقـال اـل .)4-1شكل ( Option في صندوق الحوار Text Editorالتبويب

القائمة الرئيسة

.رئيسة بشكل مختصرفيما يلي عرض سريع لمحتويات القائمة ال

:Fileالقائمة ك مـن حفظهـا، فتحهـا، اغالقهـا معظم اوامر هذه النافذة تتعلق بملفات المشروع الحالي، حيث تمكـن

عـن Printingكما انك تستطيع الوصول الى وظائف الطباعـة . واضافة عناصر وملفات اخرى اضافية .طريق هذه القائمة

:Editالقائمة

ى Paste، واللصق Cut، القص Copyنسخ عمليات التحرير كال موجودة في هذه القائمة، باالضـافة اـل .Bookmarksمجموعة من ادوات البحث وعالمة المالحظات

:Viewالقائمة

.تتعلق باظهار واخفاء مجموعة كبيرة من النوافذ متعددة الوظائف واالغراض

:Projectالقائمة ـتطيع تتعلق بالمشروع الحالي حيث توفر اوام ر الضافة عناصر وملفـات اخـرى للمشـروع، كمـا تس

Set As Startupبالنسبة لالمـر . ايضا من خالل هذه القائمةReferenceالوصول الى نافذة المراجع

Project ر مـن مشـروع فهو يجعل المشروع الحالي هو المشروع االبتدائي، وذلك في حالة وجود اكـثProject في نفس الحل Solution.

:Buildقائمة ال

ـبة لالمـر Compilingتمكنك هذه النافذة من ترجمة المشروع Configuration Manager، وبالنس .فهو يحدد االعدادات المسبقة الحفظ للمترجم

:Debugالقائمة

ـيمتد هـذا 9لحظة تصميم البرنامج تكون عدد عناصر هذه القائمة ال تتجاوز ذ س اوامر، ولكن عند التنفـي، تجد اوامر التنفيذ وااليقاف النهـائي والمؤقـت فـي هـذه )بعضها غير مفعل( امر 13صل الى العدد لي

. للبرنامجDebuggingالنافذة، كما تحتوي على جميع وظائف التنقيح

Visual Basic .NETتعرف على : الفصل االول 21 ــــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـ

انظر ايضا

لعرض بضعة اوامر من هذه القائمـة وادوات التنقـيح، انتقـل الـى الفصـل

.اآتشاف االخطاءالسابع

:Toolsالقائمة

ـتخدمها رامج اخـرى تس تحتوي على اوامر اضافية مختلفة الوظائف، كما يمكنك جعلها منصة لتشغيل ـبـبة لالضـافات . Externals Toolsبشكل متكرر عن طريق اختيار االمـر ـيمكن Add-Insوبالنس ، ف

.Add-In Managerالوصول لها عن طريق اختيار االمر

:Windowالقائمة !ال تعليق

:Helpئمة القا

ة ـتمكن مـن NET Documentation. او MSDNالبد من ان تكون قد ثبت نسخة من مكتـب ى ت حـتة Dynamic Helpوبالنسبة لالمر . الوصول الى التعليمات ، فهو يعرض لك نافذة تظهر تعليمـات فورـي

د عـدم انصحك باغالق هذه الن. بمجرد النقر بزر الفأرة على اي عنصر او نافذة من بيئة التطوير افذة عـن .الحاجة إليها، فهي تسبب بطء نسبي في الجهاز خاصة ان كان جهازك بطيء

اشرطة االدوات ما هي اال اوامر مثل الموجودة في القائمة الرئيسية تقريبا، يمكـن اضـافتها Toolbarsاشرطة االدوات

مـن القائمـة Customizeتحريرها وحذفها بالضغط بزر الفأرة االيمن على اي شريط واختيار االمـر .Microsoft Officeالمنبثقة، تماما كما تفعل مع طاقم تطبيقات

آتابة برنامجك االول

ة Visual Basic .NETواالن سنبدأ بكتابة اول برنامج لك بلغة ـتخدام بيـئ Visual حتى تتمكن من اس

Studio .NETبشكل مبدئي .

الحلول والمشاريع، Projectsحاوية لعنصـر او مجموعـة عناصـر تسـمى المشـاريع هو عبارة عن Solutionالحل

والمشروع هو البرنامج الذي تود انشائه والذي بدوره يحتوي على عدة عناصر تسـمى ملفـات المشـروع Project Files او وحدات المشروع Project Items.

22 االساسيات: الجزء األولـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ــــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـ

Blank Solution، يمكنك انشاء حل جديد باختيار االمـر الفرعـي Solutionسأبدأ معك بالحل وان File من قائمة Newمن االمر ك New Project حيث سيظهر لك صندوق حوار بعـن ب مـن يطـل

ة التطـوير OKبعد الضغط على زر . اسم الحل ومسار مجلده Visual Studio .NET ستنشئ لك بيـئف ن slnالملف . suoو . sln باالمتدادين -في نفس المجلد الذي حددته سابقا -ملفين ل هو مـل صـي يمـث

ارات suoمراجع الى المشاريع المضمنة في الحل الحالي، اما الملف ى االعـدادات وخـي وي عـل فيحـت .التخصيص التي تحددها في هذا الحل كمواقع النوافذ المفتوحة وغيرها

Projectبعد انشائك حل جديد قد تبدأ باضافة مشروع او عدة مشاريع اليه، اختر االمـر الفرعـي ى العنصـر File من قائمة Newمن االمر Node سيظهر لك نفس صندوق الحوار السابق، انقـر عـل

حتى تظهر لك في القائمة اليمنى عـدة Visual Basic Projectsفي الشجرة اليسرى الذي يحمل االسم ار ،حدد نوع، اسم. جاهزة لالستخدامTemplatesقوالب Add to ومسار المشروع ثم تأكد مـن االختـي

solution قبل الضغط على زرOK ) 11-1شكل(:

. الجاهزة والتي تمثل مشاريع يمكنك البدء فيهاTemplates القوالب :11-1شكل

ل يمكنك اضافة المزيد من المشاريع بمختلف انواعها، والطريقة الظريفة التي تمكنك مـن التحوـي

.)6-1شكل ( Solution Explorerبين المشاريع هي نافذة مستكشف الحال داد Visual Basic .NET المنجزة بلغة بالنسبة لملفات المشروع . vb فجميعهـا تنتهـي باالمـت

ـتحكم (مهما كان نوعها ات Windows Forms، نمـاذج UserControlsسواء ملفات ادوات ال ، الفـئClasses... وفي الحقيقة يمكن للملف الواحد ان يحتوي على جميع العناصر السابقة)الخ ،.

Visual Basic .NETتعرف على : الفصل االول 23 ــــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـ

المشاريعانواعـتحكم Visual Basic .NETيمكنك User من دمج عدة انواع مختلفـة مـن المشـاريع كـادوات ال

Controls تطبيقات قياسية ،Windows Application ات وغيرهـا، Class Library، مكتبات الفـئز ملخـص New Projectsربما تكون قد الحظتها في صندوق الحوار السابق ، واليك يا قـارئي العزـي

:عنها

Windows Application: ـية Windowsوهي مشاريع تشابه تطبيقات ث ).Standard Applicationاي ( القياس الجـزء الثاـل

. مخصص لهذا النوع من المشاريعWindowsتطوير تطبيقات

Class Library: رامج اخـرى، ك هذا النوع من المشاريع يحتوي على مكتبة فئات يمكنك االستفادة منها في ـب كمـا يمكـن

. ان اردتEXE او حتى DLLترجمتها الى ملفات من النوع

Windows Control Library: ـتخدمها فـي تطبيقـات User Controlsيمكنك هذا النوع من المشاريع مـن انشـاء ادوات تحكـم تس

Windows Application. سنطبق ادوات التحكم بعد مئات الصفحات الى ان نصل للفصـل السـادس .واضيع متقدمةمعشر

ASP .NET Web Application:

ويتم عرض صفحاتها عـن Server بحيث تعمل في جهة الخادم ASP .NETيمكنك من انشاء مشاريع الفصـالن العشـرون والحـادي والعشـرون .Browsers باحـد المتصـفحات Clientsطريق عمالء

.مخصص لهذا النوع من المشاريع ASP .NETتطبيقات

ASP .NET Web Service: ـتخدام ق اس ت عـن طرـي ر االنترـن ات عـب ادل البياـن ة تـب ك عملـي هذا النوع من المشاريع يسهل علـي

كمـا – DCOM القياسية دون الحاجة الى تطوير المكونات الموزعـة XML و TCP/IPبروتوكوالت .Web Servicesخدمات ويب سترى الحقا في الفصل الثاني والعشرون

Web Control Library:

ى صـفحات ، وهـي HTMLيمكنك تطوير مشاريع شبيهة بادوات التحكم لكنها خاصـة للعـرض عـلـتحكم امشابهة ـتعرض User Controlsلى حد كبير بمشـاريع ادوات ال ، ولكنهـا تعـرض فـي المس

Browser.

24 االساسيات: الجزء األولـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ــــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـ

Console Application: ك تمامـا فهذا النوع ممناDOSاذا كنت تشعر بالحنين الى تطوير التطبيقات تحت بيئة ـبة . سـب ـل بالنس

. لنا، سنستمر في تطوير هذا النوع من المشاريع حتى نهاية الجزء الثاني من هذا الكتاب

Windows Services: ة Background القياسية بحيث يعمل في الخلفية Windowsنوع خاص من تطبيقات ذ بداـي دائمـا مـن

ودة الى هـذا الموضـوع فـي الفصـل السـادس لي ع.تحميل نظام التشغيل حتى اغالق جهاز الكمبيوتر .مواضيع متقدمةعشر

Empty Project:

.سهلة جدا وال تحتاج الى تفاصيل

Empty Web Project: .هاتاسهل من سابق

ب بعد هذه الجولة السريعة حول انواع المشاريع، يؤسفني اخبارك بان ما ذكرناه هـو مجـرد قواـل

Templates د مـن هـذه تقوم بتوليد الشيفرات الضرورية لعمل ما تريد، بل حتى يمكنك انشـاء المزـيامج قياسـي Windows Service خدمـة يشـمل الواحـد قـد فالحلالقوالب او حذف الحالية، و برـن

Windows Application و اداة تحكم User Control ـيفرات ملفـات ه يكمـن فـي ش ، السر كـل . المشروع

بناء برنامجك االول

ة كل الطرق تؤدي ك مـن كتاـب ي تمكـن الى روما هي مقولة قديمة، لديك عشرات الطرق والوسائل الـتـتخدام المفكـرة Visual Basic .NETبرنامجك االول ـب ـية باس او Notepad ابتداء من ملفات نص

.Console Applicationكقالب -حتى استخدام احد القوالب الجاهزة ـاستخدام ما يهمني في هذا الفصل اعطائك الخطوات اال اء برامجـك األول ـب Visualساسية لبـن

Basic .NET ـيل، مـا وليس البدء الفعلي بشرح قواعد ومفردات اللغة، فلن اقدم لك الكثير مـن التفاص . هنا هو توضيح عملية بناء المشاريع وتنفيذها فقطهانشد

ـتالح Console Applicationانشئ اي مشروع جديد ولنقل ال فقـط، س ظة ان على سبيل المـث :نافذة محرر الشيفرة قد فتحت وكتب بها الشيفرة التالية

Module Module1 Sub Main() End Sub End Module

Visual Basic .NETتعرف على : الفصل االول 25 ــــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـ

لعـرض المخرجـات Console، استخدم الكائن FirstProg إلى Module1غير اسم الوحدة البرمجية :تحة خير علينا بمشيئة اهللاهذا برنامجك االول وهو يقوم بعرض البسملة لتكون فا.على الشاشة

Module FirstProg Sub Main() Console.WriteLine("In the name of Allah the most gracious and the most merciful") End Sub End Module

ة مع الع( لتنفيذ المشروع، Debug من قائمة Startاو اختر االمر ] F5[اضغط على المفتاح لم ان عملـي

ستالحظ ان نافذة سـوداء ظهـرت واختفـت ) بشكل تلقائيCompilingالتنفيذ تؤدي الى عملية الترجمة ـتخدم ث يسـمح للمس امج السـابق، بحـي بسرعة، ولكي تتمكن من ايقافها اضف االمر التالي فـي البرـن

:قبل اخفاء النافذة] ENTER[بالضغط على مفتاح

Module FirstProg Sub Main() … Console.Read() End Sub End Module

.)12-1شكل ( هاعد تنفيذ البرنامج لترى مخرجات

. مخرجات البرنامج االول:12-1شكل

ArabicConsoleاستخدام

ك الن امج االول وذـل اضطررت في الفقرة السابقة الستخدام اللغة االنجليزية لعـرض مخرجـات البرـنـيفرات Consoleلكائن ا ال يدعم الحروف العربية، وبما اني ساعتمد على هـذا الكـائن فـي شـرح الش

ة، فكـرت ى الكلمـات االنجليزـي المصدرية فالبد من استخدامه، وبدال من جعل امثلة الكتاب تعتمـد عـلـتخدام الحـروف Console يحاكي الكائن ArabicConsoleبتطوير كائن يحمل االسم ك مـن اس يمكـن

ى طريقـة واحـدة هـي ArabicConsoleضع في االعتبار، ان الكـائن . العربية وي اال عـل ال يحـت

26 االساسيات: الجزء األولـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ــــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـ

WriteLine() ـتخدام هـذا . فقط، وهي الطريقة الوحيدة التي نحتاجها لعرض المخرجات ان كنت تود اسزر )7-1شـكل (الكائن في مشاريعك، فيمكن اضافته عن طريق نافذة المراجـع ى اـل والضـغط عـل

Brows ومن ثم البحث عن الملف ArabicConsole.DLLفي الدليل الجذري للقرص المدمج . ب ArabicConsoleبعد اضافتك لمرجع الكائن في مشروعك، تستطيع استخدامة مباشـرة وتكـت

:شيئا مثل اضف هذا السطر قبل استخدام الكائن '

' ArabicConsole Imports ArabicConsoleProject Module FirstProg Sub Main() ArabicConsole.WriteLine ("بسم اهللا الرمحن الرحيم") End Sub End Module

انظر ايضا

Imports ArabicConsoleProjectستفهم الغرض من اسـتخدام العبـارة . بمشيئة اهللالغة البرمجةفي الفصل التالي

ث ان الكـائن ح()Readلست بحاجة الستخدام الطريقة تى تمنع النافذة من االغالق التلقـائي، حـيArabicConsoleيعطيك فرصة اغالقها بنفسك .

الترجمة والتوزيع

امج ة ترجمـة البرـن ـبة Compilingالنقطة االخيرة التي اريد التطرق لها هي عملـي وتوزيعـه، بالنسـ -بالنسبة لي-للترجمة فتوجد عشرات الخيارات المعقدة رجم تحدد بهـا س ، اال ان Compilerلوك المـت

ارات بشـكل Visual Studio .NETفريق التطوير ـل ز هـذه الخـي قد سهلوا علينا عمل ذلك بتجهـيك . Configurationsمبدئي بحيث يناسب اغلب الحاالت، تعرف هذه االعدادات ـب دئي يمكـن بشكل مـب

ون ة التطـوير فـي شـريط االد Debugرؤية احد هذه االعدادات وهو النص المعـن وي لبيـئ وات العـلVisual Studio .NET ) 13-1شكل(:

اعدادات الترجمة:13-1شكل

Visual Basic .NETتعرف على : الفصل االول 27 ــــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـ

امج Releaseبالنسبة لالعدادات ة ترجمـة البرـن فحددها اذا كانت هذه اخر مرة تقوم فيها بعملـير هـذه االعـدادات . وعندما تكون جاهز لتوزيع البرنامج دة او تحرـي ي يمكنك اضافة اعدادات جدـي والـت

من اداة الشجرة الموجودة في صندوق حوار خصـائص Configuration Propertiesتجدها في قائمة . Project Propertiesالمشروع

ات NET Framework.اخيرا، اذا اردت توزيع برنامجك الى اجهزة اخرى عليك ارفـاق مكتـب او يفضل ارفاقهـا فـي microsoft.comمع البرنامج حتى تعمل، يمكنك انزال هذه المكتبات من موقع

. ميجا بايت100اسطوانة مستقلة الن حجمها يزيد عن

ة المبدئي قد تكون اصبت باالحباط ر، ولكـن صـدقني البداـي من هذا الفصل ولم تستفد منه الشـئ الكثـيـي ات االسـطر مـن الش فرات الحقيقية ستلمسها اعتبارا من الفصل التالي وحتى نهاية الكتاب، وسترى مـئ

ة سـريعة ا تقـديم جوـل المصدرية مع شرح وافي لكل شئ مبهم لم تفهمه في هذا الفصل، فهـدفي هـنك و ،Visual Studio .NET بيئة التطوير ،NET.ومبسطة جدا حول تقنية طريقة كتابة اول برنامج ـل

ـ Visual Basic .NET إقلب الصفحة لتبدأ تعلم لغة البرمجة .Visual Basic .NETـب فر من الص .لغة البرمجةفي الفصل التالي

الثانيالفصل 2

لغة البرمجة

ن كنت تعتقد بأنني سأبدأ معك في تصميم النوافذ ووضع األدوات عليها، فيؤسفني اخبارك أن الوقـت مـا إ

ة زال مبكرا جدا للحديث عنها، حيث اني لن اتطرق الى هذه المواضيع إال ث مـن مع بداـي الجـزء الثاـلدي، لنصـحت و.Windows تطوير تطبيقاتهذا الكتاب ع مبرمجـي لو كان االمر بـي Visualجمـي

Basic .NET أن ال يقفزوا الى برمجة نمـاذج العرب بWindows Forms ـيات وا أساس ى يتقـن حـت أمر في غاية األهمية قبل االنتقال إلى تطـوير Visual Basic .NETاللغة، فمسألة اتقان لغة البرمجة

Windows، او Web Applications، او Windows Applicationsالتطبيقات المختلفـة كــ Services... الخ، خاصـة إن علمـت أنVisual Basic .NET ـيس موجهـا لتطـوير تطبيقـات ل

Windows وحسب، بل يمكنك من إنجاز األنواع المختلفة من المشاريع التي تطرقت إليها فـي الفصـل .السابق

لعـرض ArabicConsoleاني عشر سنتعامل مع الكائن اعتبارا من هذا الفصل وحتى الفصل الث ـتعلم لغـة البرمجـة بشـكل Visual Basic .NETالمخرجات على الشاشة، وتوضيح نتائج الشيفرة لت

ـتخدمتها، -ولو بسيطة–وسافترض ان لديك خلفية . سليم ي اس في البرمجة بغض النظر عـن اللغـة الـترات، ( رح المسائل النظرية حيث أنى لن اضيع الكثير من وقتي ووقتك في ش كالتكرار، التفـرع، المتغـي

ر فـي لغـة ) الخ...اإلجراءات فلدي الكثير من المسائل التطبيقية والتي ستوضح لك قضـايا أهـم بكثـي .Visual Basic .NETبرمجتك الجديدة

Modulesالوحدات البرمجية

ة ، وهي عبارModuleاول مصطلح سنتعرف عليه هو الوحدة البرمجية ك مـن كتاـب ة عن حاوية تمكـنا فجميع شيفراتك المصدرية بداخلها، ا عرفـن لو عدت إلى البرنامج األول في الفصل السابق، ستالحظ أنـن

:Module باستخدام الكلمة المحجوزة FirstProgوحدة برمجية باسم Module FirstProg Sub Main() ArabicConsole.WriteLine ")حيمبسم اهللا الرمحن الر(" End Sub End Module

30 االساسيات: الجزء األولـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـ

وتحـت Module Xأي فـوق السـطر (ال يمكنك كتابة أي شيفرة خارج نطاق الوحدة البرمجية ولو تجرأت وصرحت عن متغير أو أعلنت عن إجراء خـارج نطـاق الوحـدة ). End Moduleالسطر

ـ رجم رسـالة خط Statement isأ البرمجية، فأنت عمليا تكتب خارج نطاق الحاوية، وسيظهر لك المـت

not valid in a namespace: لن يتم تنفيذ الشيفرة التالية لعدم وجودها '' Module داخل وحدة برجمية Dim X As Integer Sub Test () … … End Sub Module FirstProg … … End Module

ة، ف ـثال –قـد ترغـب يمكن للملف الواحد أن يحتوي على اكثر من وحدة برمجـي ـيم -م فـي تقس

:وحداتك البرمجية استنادا إلى تصنيف وظائفها Module DrawingFunctions … … End Module Module InternetFunctions … … End Module Module SystemFunctions … … End Module … …

اقي المعرفـات بالنسبة لشروط تسمية الوحدات البرمجية فه Identifiersي مثل شروط تسـمية ـب

:وهي) الخ...كالمتغيرات، التركيبات، الفئات (االخرى

ى كـل هـذا - حرف 16383أن ال يزيد عدد حروف المعرف عن � ال اعتقد انك بحاجـة اـل !العدد

ة السـم " _"أن يبدأ المعرف بحرف أبجدي، مع ذلك يمكنك استخدام الشـرطة السـفلية � كبداـي" _"رف ولكن عليك اتباعها بحرف أبجدي كي يتمكن المترجم من تمييزها عـن المعامـل المع

).الذي يستخدم لتقسيم األمر إلى اكثر من سطر(

لغة البرمجة: الثانيالفصل 31 ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــــ ـــ ــ ــ ـــ ــ ــ ـــ ـــ ــ ــ ـــ ـ

د . لتعريف معرف جديدKeywordال يمكنك استخدام اسم يمثل كلمة محجوزة � وان كـان الـبـين ال ] ( و [ من ذلك، فاكتب اسم المعرف داخل القوس ). Dim [Dim] As Integer: مـث

.أيضا لتعريف معرفات أخرى غير الكلمات المحجوزة] و [ يمكنك استخدام القوسين

مالحظة

باسـتخدام الحـروف العربيـة Visual Basic .NETتسـمح لـك لغـة البرمجـة ، إال أنني لم UNICODEلكتابة اسماء المعرفات، فهي داعمة لجدول الرموز

صة، فال اعتقد انك ولن استخدمها ال في هذا ا لكتاب وال في مشاريعي الخا :تود رؤية شيفرة مشابهة للشيفرة التالية

Dim الكائن As New فئة Dim س As Integer If صيته.الكائن Then 23 = خا.الكائن = س صيته 2خا = 0 End If .الكائن محضون_آائن (س ,20) طريقة.

ى Moduleبرمجية أخيرا، ال تحاول تعريف اكثر من وحدة بنفس االسم في داخل المشـروع، حـت

:وان اختلفت الملفات التابعة لها، فهذا يسبب خطأ تعارض األسماء لن تتم ترمجة الشيفرة التالية لتعارض ' اسم الوحدة MyModule يف امللفني ' ' First.vb يف امللف Module MyModule … … End Module ' Second.vb امللفيف Module MyModule … … End Module

مالحظة

يمكنك استخدام نفس االسم لتعريف اآثر من وحدة برمجية شريطة

سأتطرق الى مجاالت . مختلفةNamespacesتعريفها في مجاالت اسماء .هذا الفصلل القسم االخيراالسماء في

32 االساسيات: الجزء األولـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـ

Sub Mainاإلجراء ك Moduleد من االجراءات في داخل الوحدة البرمجية تستطيع تعريف عدد غير محدو بما لذ وطـاب ـل

ك مـن Mainمن االسماء التي تريدها، اال ان االجراء الذي يحمل االسم له طـابع خـاص، فهـو يمكـن :تخصيص المترجم ليقوم باستدعاء هذا االجراء مع بداية تنفيذ البرنامج

Module Module1 Sub Main() ArabicConsole.WriteLine("بداية الربنامج من هنا") End Sub End Module

:في اكثر من وحدة برمجية Main المزيد ايضا، تستطيع تعريف اكثر من اجراء

Module Module1 Sub Main() ArabicConsole.WriteLine("من الوحدة الربجمية االوىل") End Sub End Module Module Module2 Sub Main() ArabicConsole.WriteLine("من الوحدة الربجمية الثانية") End Sub End Module

امج؟ Mainوالسؤال الذي يطرح نفسه، أي من االجرائين ذ البرـن ة تنفـي السابقين سيتم استدعائه مع بداـي

ة Project Property مـن نافـذة Startup Objectوالجواب هو كائن الوحدة الذي تحدده فـي خاـنPages ) ستظهر رسالة خطأ اذا اخترت وحدة برمجية . )1-2شكلModule لم يعـرف بهـا اجـراء

ار Mainباسم الموجـود فـي نفـس (Sub Main، كما ستظهر نفس رسالة الخطأ ان حـددت االختـي .تعريفه في اي وحدة برمجية في اكثر من وحدة برمجية او لم يتم Mainان وجد االجراء ) القائمة

. تحديد االجراء االبتدائي للمشروع:1-2شكل

لغة البرمجة: الثانيالفصل 33 ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــــ ـــ ــ ــ ـــ ــ ــ ـــ ـــ ــ ــ ـــ ـ

Sub Newاالجراء ـيد Newاجراء اخر له طـابع خـاص يحمـل االسـم وع مـن االجـراءات بالمش ، يعـرف هـذا الـن

Constructor ه ابع ـل ت . ، وهو عبارة عن اجراء يتم تنفيذه بمجرد انشاء نسخة من الكائن الـت و كاـن فـل :Main قبل Newحدة البرمجية التالية هي اول وحدة يتم تنفيذها في البرنامج، فسيتم تنفيذ االجراء الو

Module Module1 Sub New() ArabicConsole.WriteLine("اوال New سيتم تنفيذ املشيد") End Sub Sub Main() ArabicConsole.WriteLine("Main يذ االجراء الرئيسيمث تنف ") End Sub End Module

انظر ايضا

صيل والتطبيقات حول المشيدات في Constructorsتجد المزيد من التفا

.الفئات والكائناتالفصل الرابع

ـتدعاء احـد ذها اال ان قمـت باس ـتم تنفـي ة ال ي عليك معرفة ان المشيدات في الوحدات البرمجـي

ة اجراءات الوحدة ال ـيد الموجـود فـي الوحـدة البرمجـي برمجية او الوصول الى احد متغيراتهـا، فالمشModule2 ة التابعـة التالية لن يتم تنفيذه، وذلك الننا لم نستخدم اي عضو من اعضـاء الوحـدة البرمجـي

:له Module Module1 Sub New() ArabicConsole.WriteLine("اوال New سيتم تنفيذ املشيد") End Sub Sub Main() ArabicConsole.WriteLine("Main مث تنفيذ االجراء الرئيسي") End Sub End Module Module Module2 Sub New() ArabicConsole.WriteLine("لن يتم تنفيذ هذا املشيد") End Sub End Module

34 االساسيات: الجزء األولـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـ

المتغيرات والثوابتعلى اهمية موضوع المتغيرات في أي لغة برمجـة، وإذا كـان أسـاس إتقـان اثنان يختلف مبرمجان ال

رات اللغات الطبيعية هو تعلم حروف ومفردات تلك اللغة، فان اساس اتقان لغات البرمجة هو تعلم المتغـيرات فـي . والثوابت التي تبني بها اجراءات برامجك ف فكـرة المتغـي Visual Basicنظريا، ال تختـل

.NET ه فـي ت علـي عن لغات البرمجة القديمة، ولكنها تختلف اختالفا جذريا في بنيتها التحتية عما كاـن .السابق كما سترى الحقا

التصريح عن المتغيرات

وع As تستخدم للتصريح عن متغير جديد برفقة المعامل Dimما زالت الكلمة المحجوزة ذي يحـدد ـن اـل :المتغير

' Integer تغري من النوعم Dim Age As Integer ' String متغريان من النوع Dim FirstName As String Dim LastName As String

ك Stringفي الشيفرة السابقة عرفت متغيرين من النوع ك يمكـن Visual في سطرين منفصلين، مع ذـل

Basic .NETمن دمجهما في سطر واحد : Dim Age As Integer Dim FirstName, LastName As String

:بالرغم من اختالف انواعها–او دمج تصاريح المتغيرات الثالثة كلها في سطر واحد

ال انصحك بتعريف انواع خمتلفة من ' املتغريات يف سطر واحد 'Dim FirstName, LastName As String, Age As Integer

ـيكون نوعـه ينصح دائما بتحديد نوع المتغير عند التصريح ر فس وع المتغـي عنه، وان لم تحـدد ـن

:، وسيتم تحويله الى نوع اخر تماثل نوع القيمة التي تسندها اليهObjectبشكل مبدئي Dim X X = 10 ' Integer اصبح املتغري هنا من النوع X = "10" ' String وهنا اصبح

غيير نوع المتغير مـن وقـت الخـر، اال انهـا مع ان الطريقة السابقة تعطيك مرونة كبيرة في تشكيل وت

ام بجهـد اضـافي ى القـي رجم اـل تسبب بطئا كبيرا في عملية تنفيذ البرنامج، والسبب هو اضطرار المـت .لتحويل نوع المتغير

لغة البرمجة: الثانيالفصل 35 ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــــ ـــ ــ ــ ـــ ــ ــ ـــ ـــ ــ ــ ـــ ـ

:Option Explicitالعبارة ر، امـا ان كا ـتخدام المتغـي ارة مبدئيا، عملية التصريح عن المتغيرات أمر الزامي عليك قبل اس ت العـب ـن

Option Explicit Off مسطورة في اعلى الملف، فيمكنك استخدام المتغيرات والتعامل معهـا مباشـرة :Dimدون الحاجة للتصريح عنها ـب

Option Explicit Off Module Module1 Sub Main() متغري جديد استخدمته مباشرة ' ' Dim ـ دون تعريفه ب programmerName = "ترآي العسريي" ArabicConsole.Writeline ( programmerName ) End Sub End Module

ذ صحيح ان الشيفرة السابقة ستوفر عليك عناء التصريح عن المتغيرات، ر محـب إال أن هذا األسـلوب غـي

:السباببشكل كبير لدى المبرمجين الجادين، االخطاء االمالئية هي احد ا

خمرجات االمر التايل ال شئ بسبب اخلطأ االمالئي يف ' آتابة اسم املتغري السابق 'ArabicConsole.Writeline ( programerName )

رات Option Explicit Offسبب اخر قد يجعلك ترفض استخدام العبارة ع المتغـي وهو ان جمـي

ى وفي كل مرة Objectستكون بشكل ابتدائي من النوع ر اـل وع المتغـي ل ـن تسند قيمة جديدة سيتم تحوـي .، مما يسبب بطئا في عملية التنفيذالمسندة اليهالنوع المماثل للقيمة

ذي Option Explicit Offعليك االخذ بعين االعتبار ان تأثير العبارة ف الحـالي اـل يشمل المـلار القيمـة وبدال من كتابتها في كافة ملفات المشروع . سطرت فيه العبارة فقط Off االخرى، يمكنك اختـي

ب Option Explicitمن قائمة Project مـن نافـذة خصـائص المشـروع Build في خانة التبوـي

Property Pages ) 2-2شكل(.

36 االساسيات: الجزء األولـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـ

.Off الى On من Option Explicit تغيير قيمة :2-2شكل

قابلية الرؤية وعمر المتغيرات

ر Scope او المدى Visibilityقابلية الرؤية ى المتغـي ى الوصـول اـل للمتغير تمثل قدرة البرنامج عـلـتخدامه مـن MySub1 الموجود في االجراء Xواستخدامه، فالمتغير التالي، ال يمكنك الوصول اليه واس

:خارج االجراء Sub MySub1 () Dim X As Integer X = 20 End Sub Sub MySub2 () تغريال ميثل امل X السابق ' ArabicConsole.WriteLine (X) End Sub

ه، فـالمتغير المتغير، فتمثل Lifetimeاما عمر Xالفترة التي يظل فيها المتغير محتفظـا بقيمـت

ذ 20الموجود في الشيفرة السابقة، سينتهي ويفقد القيمة التي كان محتفظا بها بمجـرد االنتهـاء مـن تنفـية Visual Basic .NETسلوب الذي يتبعه وحتى تفهم اال. MySub1االجراء لتطبيق مفهـومي قابلـي

:للمتغير، عليك معرفة انواع المتغيرات من منظور الرؤية والعمر الرؤية والعمر

:المتغيرات المحلية الديناميكية هي متغيرات يتم االعـالن عنهـا داخـل Dynamic Local Variablesالمتغيرات المحلية الديناميكية

ذ االجراء ات، وعمر المتغير يبدأ من السطر الذي تصرح فيه عن المتغير وينتهي بعد االنتهـاء مـن تنفـيـتخدم الكلمـة . اما بالنسبة لقابلية الرؤية فهي محصورة داخل االجراء الذي صرحت فيه فقط . االجراء تس

. ايضا للتصريح عن متغير محلي ديناميكيDimالمحجوزة

لغة البرمجة: الثانيالفصل 37 ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــــ ـــ ــ ــ ـــ ــ ــ ـــ ـــ ــ ــ ـــ ـ

في تسـمية هـذا smallCase استخدام اسلوب يسمى Microsoft .NETتقترح عليك مستندات والحـرف االول مـن الكلمـات smallالنوع من المتغيرات، بحيث تكون الكلمة االولى صغيرة الحروف

: امثلة.Capitalاالخرى كبير Dim programmerName As String Dim userID as Integer Dim employeeSalary As Decimal

ـ بعيدا عن ة يعـرف باـل ة الديناميكـي رات المحلـي موضوع التسمية، يوجد نوع خاص من المتغـي

Block level Variables وهي متغيرات يتم تعريفها داخل تركيب ،Block) كحلقـةFor … Next ،رات يكـون محصـورا داخـل ). وغيرهاDo … Loop، حلقة If … Thenجملة مدى هـذه المتغـي

ة السـابقة التركيب الذي اعلنت فيه عن ة الديناميكـي هـذا . المتغير، وعمرها مثل عمر المتغيرات المحلـي :For … Next عرف داخل حلقة yمتغير يحمل االسم

Dim counter As Integer For counter = 1 To 10 Dim y as integer … … Next

وع مـن ال تحاول استخدام المتغير المعرف في داخل تركيب خارج هذا ال تركيب، فمدى هـذا الـن

: محصور داخل التركيب فقط-كما قلت–المتغيرات Dim x As Integer If x = 0 Then Dim y As Integer … … End If x = y ' رسالة خطأ

ب فـي نفـس كما أنك ال تستطيع استخدام اسم متغير ديناميكي محلي لتسمي به متغير داخل تركـي

:االجراء Dim a As Integer Do Dim a as integer ' رسالة خطأ … … Loop

38 االساسيات: الجزء األولـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـ

ـتوى Visual Basic .NETمع ذلك، يسمح لك ى مس رات العامـة او عـل باستخدام نفس اسماء المتغـي :الوحدة او حتى اسماء متغيرات اخرى معرفة في تركيب آخر

افرتض انه متغري على مستوى الوحدة او عام 'Dim x As Integer … … If x = 0 Then Dim x As String ' ممكن جدا … … End If Do Dim x As Long ' خذ راحتك … … Loop

ة ـيس نهاـي ة االجـراء ول ى نهاـي نقطة هامة واخيرة، عمر هذا النوع من المتغيرات مستمر حـت

ب الحلقـة x التركيب الذي عرفت فيه، فالمتغير For التالي سيحتفظ بقيمته حتى وان خرجت من تركـيcounter2الذي عرف فيها :

Dim counter As Integer Dim counter2 As Integer For counter = 1 To 3 For counter2 = 1 To 3 Dim x As Integer ' سيستمر يف االحتفاظ بقيمته x = x + 1 ArabicConsole.WriteLine(x) Next Next

:مخرجات الشيفرة السابقة ستكون

1 2 3 4 5 6 7 8 9

لغة البرمجة: الثانيالفصل 39 ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــــ ـــ ــ ــ ـــ ــ ــ ـــ ـــ ــ ــ ـــ ـ

:المتغيرات المحلية الستاتيكيةذلك Static Local Variablesالمتغيرات المحلية الستاتيكية ة، ـل هي نفس المتغيرات المحلية الديناميكـي

دي كل ما قلته في الفقرة السابقة ينطبق ـتثناء ان عمرهـا االفتراضـي اـب اي ( هنا دون اي اختالف، باسه ابع ـل ك )يستمر المتغير االستكاتيكي محتفظا بقيمته حتى نهاية البرنامج او مـوت الكـائن الـت ، كمـا اـن

: للتصريح عن متغير ستاتيكيDim عوضا عن Staticستستخدم الكلمة المحجوزة Static staticVariable As Integer

ة، كمـا انهـا ال رات الديناميكـي تحاول استخدام المتغيرات الستاتيكية كثيرا، فهي ابطأ مـن المتغـي

ـتخدم . تحجز مساحة في الذاكرة طوال فترة عمل البرنامج دون أن يكون هناك حاجة ماسة إليهـا قـد تس :المتغيرات الستاتيكية مثال لالحتفاظ بقيمة عداد او تنفيذ اجراء مرة واحدة

Sub Counter () Static counter As Integer counter = counter + 1 … … End Sub Sub PrintData () Static isPrinting As Boolean If isPrinting Then Exit Sub Else isPrinting = True End If … … End Sub

ـتخدامها مـع Staticمة المحجوزة اخيرا، الكل ال تطبق اال على المتغيرات المحلية، فال تحاول اس

.المتغيرات على مستوى الوحدة او المتغيرات العامة فهي ستاتيكية بطبيعتها

:المتغيرات على مستوى الوحدة البرمجية والمتغيرات العامةك قد تود من االجراءات المختلفة التابعة لوحدة برمجية معي رات فيمـا بينهـا، يمكـن ة مشـاركة المتغـي ـن

Visual Basic .NET ـتوى الوحـدة ى مس Module من عمل ذلك عن طريق تصريح متغيرات عـلLevel Variables ة ـتخدم . ، وبهذا يكون مدى هذه المتغيرات شامال لجميع اجراءات الوحدة البرمجـي اس

ـتم التصـريح عـن لتعريف متغير على مستوDim او Privateالكلمة المحجوزة ى الوحدة شريطة ان ي :المتغير خارج االجراءات

40 االساسيات: الجزء األولـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـ

Module Module1 متغريات على مستوى الوحدة ' Dim x As Integer Private y As Integer Sub Main() x = 50 … End Sub Sub Test () y = 10 … End Sub End Module

امج، Global Variablesاما المتغيرات العامة فمداها يشمل جميع شوارع واودية وملفات البرـن

: لتعريف متغير عامPublicاستخدم الكلمة المحجوزة . وليست محصورة لوحدة برمجية معينة

Module Module1 Public x As Integer ' متغري عام Sub Main() x = 5 … End Sub End Module وحدة برجمية اخرى 'Module Module2 Sub Test() x = 1 ' ميكن الوصول اىل املتغري … End Sub End Module

مالحظة

ضا استخدام الكلمة المحجوزة لتعريف متغير عام، ولكنها Friendيمكنك اي

في قابلية الوصول الى المتغير من Publicلف عن الكلمة المحجوزة تخت مدى المتغير على المشروع الحالي Friend حيث تحصر .مشروع خارجي

.فقط

ـتندات ـتخدام اسـلوب NET.وكمعيار للتسمية، تقترح عليك مس د تسـمية PascalCase اس عـن

:ستوى الوحدة للمتغيرات على مsmallCaseالمتغيرات العامة واالسلوب

Public ProgrammerName As String ' متغريات عامة Friend ClientAge As Integer Dim programmerName As String ' متغريات على مستوى الوحدة Private clientAge As Integer

لغة البرمجة: الثانيالفصل 41 ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــــ ـــ ــ ــ ـــ ــ ــ ـــ ـــ ــ ــ ـــ ـ

ا ة البرـن ى نهاـي مج او اخيرا، عمر المتغيرات على مستوى الوحدة او المتغيرات العامة مستمر حـت . الكائن التابع الذي صرحت فيه

انواع البيانات

ـتخدامها فـي ـتطيع اس ي تس يبدو ان الوقت قد حان ألخذ جولة تعريفية حول انواع البيانات المختلفـة الـت :برامجك، ولكن دعني اوضح لك نظرتي الشخصية حول هذه الفقرة

ا –ال تتبع ) الخ ....String ،Integer ،Long ،Dateكـ (انواع البيانات للغـة البرمجـة -تقنـيVisual Basic .NET فهي عبارة عن فئات ،Classes وتركيبات Structures ة عرفـت فـي مكتـب

، ) والتي تحـدثت عنهـا فـي الفصـل السـابق NET Framework.التابعة الطار عمل (BCLفئات ارة عـن كـائن : وبعبارة أخرى ت مـن ا Objectكل شئ تراه في شيفراتك عـب رمجين ، فـان كـن لمـب

ـتخدمها فـي برامجـك، المخضرمين عليك ان تعلم علم اليقين ان جميع المتغيرات التي تصرح عنها وتسل . ماهي اال كائنات منشأة من فئات او تركيبات معرفة مسبقا رات مـث واع المتغـي ، Byteفحتى ابسط اـن

تعلم اساسيات لغـة البرمجـة وبما اننا ما زلنا في بداية. فهو عبارة عن كائن له طرق وخصائص تابعه له Visual Basic .NET ل -حاليا على األقل–، فال اعتقد انه من المناسب واع قـب التحدث عن هـذه االـنذلك كـان قـراري النهـائي )الفئات والكائنات الثالثوهو موضوع الفصل (استيعاب الكائنات والفئات ، ـل

ك . األساسية الفئات السادسهو تأجيل تفصيل هذه االنواع الى الفصل اك، يعـرض ـل وإلي ان نلتقي هـندعمها Primitive Data Types االولية الجدول التالي ملخص سريع النواع البيانات ي ـي Visual الـت

Basic .NET:

م النوع مجال القيمة الحجBoolean 2 بايت True) صح ( اوFalse) خطأ.(

Byte 1 255 الى 0عدد صحيح من بايت. Char 2 من نوع ح بايت .UNICODEرف واحد Date 8 كما 11:59:59الى الساعة 0:00:00وقت من الساعة بايت ،

من يوم ديسمبر 31 الى 0001 يناير لعام 1يشمل تاريخ .9999لعام

Decimal

بايت 16

الى 0عدد صحيح من ±79,228,162,514,264,337,593,543,950,335

الى 0او عشري من ±7.9228162514264337593543950335

42 االساسيات: الجزء األولـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـ

م النوع مجال القيمة الحجDouble

الىE+3081.79769313486231570عدد عشري من بايت 8

E-3244.94065645841246544لبة . بالنسبة لالعداد السا ومن

E-3244.94065645841246544 الى E+3081.79769313486231570 بالنسبة لالعداد .الموجبه

Integer

الى 2,147,483,648 –حيح من عدد ص بايت 42,147,483,647.

Long

الى 9,223,372,036,854,775,808 -عدد صحيح من بايت 89,223,372,036,854,775,807.

Object

.جميع القيم واالنواع يمكن حفظها هنا بايت 4

Short 2 32,767 الى 32,768 –عدد صحيح من بايت. Single 4 عدد عشري من بايتE+383.4028235 الى E-451.401298

لبة لسا الى E-451.401298ومن . بالنسبة لالعداد اE+383.4028235بالنسبة لالعداد الموجبه .

String 10) + 2 * عدد بايت) الحروف

.UNICODE مليار حرف من نوع 2 الى 0من

ة همـا عندما تمعن النظر في الجدول السابق، ستالحظ وجود نوعين من البيانات الحر و Charفـي

String . بالنسبة للنوع االول فهو يمثل حرف واحد فقط من حروفUnicode لذلك فـالمتغيرات مـن ،ذيل Charالنوع "c" اليمكن ان تحمل قيمة حرفيه تزيد عن حرف واحد، كما يشرط استخدام حـرف اـل

:String عن قيمة سلسلة الحروف من النوع Charحتى تميز القيمة الحرفية من النوع

Dim A As Char A = "ت"c A = "ترآي"c ' رسالة خطأ هنا

رات مـن Charقد تستغرب مدى الجدوى من االعتماد على المتغيرات من نوع دال مـن المتغـي ـب

ـتهالك Stringنوع ذ واالقتصـاد فـي اس رغم امكانياتها المحدودة، السبب ببساطة السـرعة فـي التنفـيوع ذات القيمـة Charرات من نوع حيث أن المتغي. مصادر النظام Value Type هي متغيرات من الـنVariables وع رات مـن الـن ة String بينمـا المتغـي رات مرجعـي Reference Type هـي متغـي

Variables .الفروق بين المتغيرات المرجعية والمتغيرات ذات القيمة هو موضوع الفقرة التالية.

لغة البرمجة: الثانيالفصل 43 ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــــ ـــ ــ ــ ـــ ــ ــ ـــ ـــ ــ ــ ـــ ـ

:القيمةالمتغيرات المرجعية والمتغيرات ذات في بداية هـذا القسـم -توجد مسائل تقنية بحتة تعتبر في غاية االهمية تتعلق بالمتغيرات، حيث اني ذكرت

ه فـي لغـات البرمجـة -من الفصل ت علـي ان البنية التحتية للمتغيرات قد تغيرت تغيرا جذريا عما كاـنذ ل السابقة، اذ ان القضية ابعد من أن تكون مجرد منطقة محجوزة فـي اـل اكرة تحفـظ بهـا قيمـة لتمـث

ك . كما اتفقنا سـابقا Object هو كائن Visual Basic .NETالمتغير، فكل شيء تراه في ولكـن علـي تنقسـم Visual Basic .NET في لغة البرمجـة -او انواع البيانات بصفة عامة–معرفة ان المتغيرات

Reference Type Variablesعيـة المتغيرات المرج: الى قسمين رئيسين مهما اختلفت انواعها هما .Value Type Variablesوالمتغيرات ذات القيمة

ـتق Value Type Variablesسأبدا معك بالمتغيرات ذات القيمة رات مش ، هذا النوع من المتغـيع الوراثة واالشتقاق الوراثي موضوع الفصل (System.ValueTypeوراثيا من الفئة .)الوراثـة الراـب

ث ان تقنيا، هذا ا لنوع من المتغيرات شبيه بفكرة المتغيرات الموجودة في لغـات البرمجـة السـابقة، حـيـتمحى مـن ) في معظم االحوالStackقد تكون (المتغيرات تحفظ قيمها في قسم من ذاكرة البرنامج ، وس

ر ة . الذاكرة مباشرة بعد نهاية عمر المتغـي ات العددـي ع البياـن وع Numbers جمـي ات مـن الـن ، والبياـنBoolean، Char و ، Date والمتغيرات المعرفة من التركيبات ،Structures او Enums ات هي بياـن

. Value Typeمن النوع ذات القيمة ، فيوجد الكثير الخبرك به عنها الحقا، ولكن كـل مـا Reference Typeاما المتغيرات المرجعية

ـتم حفظـه ) يسمى مؤشر في هذه الحالة(متغير اريد منك ان تعلمه عنها في الوقت الحالي هو ان قيمة ال يامج كما تحفظ المتغيرات ذات القيمة، بينما تحفظ البيانات الحقيقة للكائن في قسم خاص مـن ذاكـرة البرـن

، وفي الحقيقة ال تتم عملية ازالة قيمها من الذاكرة مباشرة بعد نهاية عمرهـا Managed Heapيسمى ق مجموعـة االفتراضي، فهي تتطلب عملية تسم Garbage Collectionى افراغ المصادر عن طرـي

: فلو كان لدينا هذين المتغيرينNET.مقدمة من اطار عمل Dim Name As String = "متغري مرجعي ' "ترآي العسريي Dim Age As Integer = 99 ' متغري ذا قيمة

:يمكننا تخيل مواقعهما بالذاكرة كما في الشكل التالي

. اماكن المتغيرات ذات القيمة والمتغيرات المرجعية في الذاكرة:3-2شكل

44 االساسيات: الجزء األولـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـ

انظر ايضا

الفئات السادس حول المتغيرات ذات القيمة في الفصل لي عودة اخرى بينما سيكون لي حديث مطول عن المتغيرات المرجعية في ،االساسية

.الفئات والكائنات الثالثالفصل

ات Arrays والمصفوفات ،Stringالمتغيرات من النوع Classes، والمتغيرات المعرفة من الفـئ

.Reference Typeجميعها متغيرات مرجعية ـين ع الفروقـات ب ك جمـي من منطلق التسلسل التعليمي الذي اتبعه في هذا الكتاب، ال اريد اعطاـئ

فرقـة مـن هـذا المتغيرات ذات القيمة والمتغيرات المرجعية هنا، حيث اني افضل ذكرها في امـاكن مت ر الكتاب لكي تناسب الفقرات التابعة لها، ولكن دعني اخبرك هنا بان المتغيرات ذات القيمـة اسـرع بكثـيمن المتغيرات المرجعية، كما انها اقتصادية جدا في استهالك مصادر النظام، لذلك حاول االعتمـاد عليهـا

.عوضا عن المتغيرات المرجعية اال ان دعتك الحاجة لغير ذلك

اسناد القيمك ستكتشـف ان االمـر قد تستغرب من تخصيص فقرة كاملة عن عملية اسناد القيم الى المتغيرات، اال اـن

.بحاجة الى التطرق لبعض التفاصيل الدقيقة حول هذه المسألةـناد ـتخدام معامـل اس رات باس بادئ ذي بدء، انت تعلم وانا اعلم اننا نستطيع اسناد القيم الى المتغـي

ة التصـريح بكـل "=" القيم اء عملـي ه مباشـرة، او اثـن ، يمكنك اسناد قيمة للمتغير بعد التصريح عـن :انسيابية

Dim X As Integer = 10 ' اسناد قيمة حلظة التصريح Dim Y As Integer Dim Z As Long Y = 20 Z = 30

وع ان اسندت قيم للمتغيرات اثناء عملية التصريح الكثر من متغير في سطر و د ـن احد، عليك تحدـي

:المتغير لكل تصريح واال ستظهر رسالة خطا

هنا ممكن 'Dim X As Integer, Y As Integer = 20, Z As Long = 30 رسالة خطأ 'Dim X, Y As Integer = 20, Z As Long = 30

لغة البرمجة: الثانيالفصل 45 ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــــ ـــ ــ ــ ـــ ــ ــ ـــ ـــ ــ ــ ـــ ـ

ى ال ـندها اـل رات، لست بحاجة الخبارك انك المسؤول االول واالخير عن مجال القيم التي تس متغـيـتظهر رسـالة خطـأ وان اضفت قيمة خارج نطاق مجال القيم المسموح به لنوع معين من المتغيرات، س

:وقت التنفيذ رسالة خطأ 'Dim X As Byte = 256

رات Visual Basic .NETالمزيد ايضا، يوفر لك ى المتغـي ـيم اـل معامالت اضافية السناد الق

: توضحها لك هذه الشيفرةتعتبر اختصار لعمليات رياضية شائعة Dim X As Integer = 5 + 5 X += 1 ' x = x + 1 X -= 2 ' x = x - 2 X *= 3 ' x = x * 3 X \= 6 ' x = x \ 6 X ^= 2 ' x = x 2

:مع العلم ان المعامالت السابقة ال يمكنك استخدامها اثناء عملية التصريح عن المتغير

لن يسمح لك Visual Basic .NET بكتابة الشيفرة ' بالشكل التايل حىت لو توسط بيل جيتس 'Dim X As Integer += 10 Dim Y As Long ^= 20

رات ذات ـين المتغـي دعني اوضح لك قضية تقنية تتعلق باسناد القيم حيث تبين لنا احـد الفـروق ب

رات ذات عملية اسناد . Reference Type والمتغيرات المرجعية Value Typeالقيمة ـين المتغـي القيم بة، رات المرجعـي ـين المتغـي ـيم ب القيمة تقوم بنسخ فعلي للمتغيرات ليستقل كل متغير بقيمته، اما اسناد القى نفـس الكـائن ـير اـل فهي ال تؤدي إلى نسخ قيم المتغيرات، بل كل ما تقوم به هو نسخ المؤشرات لتش

ـيئا ممـا ). Managed Heapي القسم والموجودة ف(الذي يحمل بيانات المتغيرات الفعلية م تفهـم ش ان ـل : في الصفحة التالية)4-2بالشكل ( الشيفرة التالية والموضحة فيسبق، ركز

متغريات مرجعية 'Dim Name As String = "ترآي العسريي" Dim Name2 As String = Name متغريات ذات قيمة 'Dim Age As Integer = 99 Dim Age2 As Integer = Age

46 االساسيات: الجزء األولـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـ

. توضيح الفرق في عملية اسناد القيم بين المتغيرات ذات القيمة والمتغيرات المرجعية:4-2شكل

ـين )4-2الشكل (كما ترى في اال انهمـا ) Name2 و Name(، رغم اني عرفت متغيرين مختلف

رات ، بينما Managed Heapال يزاالن يشيران الى نفس القيمة الفعلية للمتغير في القسم ـتقل المتغـي تس)Age و Age2 (بقيمها في مناطق مختلفة من الذاكرة.

مالحظة بايت 4حجمها ) Stackالموجودة في قسم (ؤشرات المتغيرات المرجعية م

.تشير لهامهما اختلف نوع القيم التي

:Option Strictالعبارة

ات على مر االجيال السابقة من لغات البرمجة، واجه المبرمجون م ل البياـن عاناة كبيرة فـي مسـألة تحوـياع اسـلوب . المختلفة من القيم Wideningالتحويـل الواسـع مع ذلك، لن تواجه اي مشاكل عند اتـب

Conversion حيث ان التحويل الواسع يقوم بنسخ قيمة من نوع صغير ،)Shortر ) مثال وع اكـب الى ـن :قيمةمما ال يؤدي الى التضحية بدقة ال) Doubleكـ ( منه

Dim A As Short = 10 Dim B As Double = A ' ال مشكلة ArabicConsole.WriteLine(A) ' 10 ArabicConsole.WriteLine(B) ' 10

لغة البرمجة: الثانيالفصل 47 ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــــ ـــ ــ ــ ـــ ــ ــ ـــ ـــ ــ ــ ـــ ـ

ر Doubleوعلى العكس من ذلك، لو كان لدينا متغير من النوع ى متغـي ه اـل ـناد قيمـت واردت اسـبب واضـح ، ستفقد هذه العملية الدقة العد Singleاخر من النوع دية الموجودة في المتغير السـابق، الس

:Single تستطيع حمل قيم اكثر دقة من النوع Doubleالن المتغيرات من النوع Dim A As Double = 3.9999999 Dim B As Single = A ArabicConsole.WriteLine(A) ' 3.9999999 ArabicConsole.WriteLine(B) ' 4

ى ال يتعـدى Visual Basic .NETيضطر في الشيفرة السابقة، الى اجراء عملية التحويل التلقائية حـت

رقم Singleحدود مجال القيم التي تسمح للمتغيرات من النوع حملها، مما يؤدي الى التضـحية بدقـة اـلوع ل . Doubleالمحفوظـة فـي الـن وع مـن التحوـي Narrowingبالتضـييق يعـرف هـذا الـن

Conversion كـ (القيمة من متغير كبير ، اي انك تضيقDouble ( ه وهـو (الى متغير اصـغر مـنSingle .(التحويل من : امثلة اخرىLong الى Integer الى Short الى Byte... الخ.

ارة )Bugsالشوائب (التضييق سبب رئيسي المراض البرامج ـتخدام العـب ـتطيع اس ك تس ، اال اـنOption Strict Onك كمبرمج و في اعلى الملف حتى تمنع نفسVisual Basic .NET كمترجم من

ك رسـالة اجراء عملية التضييق التلقائية بين االنواع المختلفة من البيانات، لذلك الشيفرة السابقة ستظهر ـل : مسطورةOption Strict Onخطأ ان كانت العبارة

منع عملية التضييق 'Option Strict On Module Module1 Sub Main() Dim A As Double = 1 Dim B As Single A = B ' ممكنالواسعالتحويل B = A ' رسالة خطأ بسبب التضييق End Sub End Module

مالحظة

يشمل الملف الذي سطرت فيه فقط، وان اردت Option Strictأثير العبارة ت

يمكنك -دون الحاجة لكتابتها-مشروع االخرى شملها في آافة ملفات الدات المترجم في نافذة آما فعلنا - Project Property Pagesتعديل اعدا

.)2-2شكل ( Option Explicitسابقا مع

48 االساسيات: الجزء األولـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـ

ة Option Strictال يقتصر تأثير العبارة ات العددـي ى فقـط على البياـن د ليصـل اـل ل يمـت ، ـب :الخ ...String ،Date ،Booleanالمتغيرات االخرى كـ

ممكن يف حالة ' Option Strict Off فقط 'Dim A As String Dim B As Boolean A = "True" B = A

الخـاص باالعـداد الصـحيحة، \وعند الحديث عن المعامالت، عليك التفريق بين معامل القسـمة

ا، كمـا ان معامـل والذي يستخدم لالعداد العشرية الن عملية الت/ وبين معامل القسمة ـتم تلقائـي حويل لن ت :Doubleيحول القيم الى ^ االس

رسالة خطأ يف حالة '' Option Strict On Dim X As Integer X = 10 / 2 X = 2 3

واع المختلفـة Option Strict Onفي المقابل، تفعيلك للعبارة ال يعني انك ال تستطيع اسناد االـن

:ستمرار على ذلك شريطة ان تكون لبق وتستخدم دوال التحويلمن القيم، بل يمكنك اال ممكن عمل ذلك حىت لو فعلت العبارة '' Option Strict On Dim X As Double = 3.2 Dim Y As Integer = CInt(X)

:يعرض لك الجدول التالي مجموعة من دوال التحويل النواع البيانات االخرى

هاالقيمة التي تعود ب الدالة

CBool Boolean CByte Byte CChar Char CDate Date CDbl Double CDec Decimal CInt Integer

CLng Long CObj Object

CShort Short CSng Single CStr String

لغة البرمجة: الثانيالفصل 49 ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــــ ـــ ــ ــ ـــ ــ ــ ـــ ـــ ــ ــ ـــ ـ

ى Option Strict Onاخيرا، ما ذكرته في السطور السابقة حول تأثير العبارة كان موجهـا اـلة Value Type القيمة المتغيرات ذات ات الحقيقـي ـبة للكائـن رات – بشكل مباشر، وبالنس اقصـد المتغـي

ث فـي الفصـل الحقا فلها سواليف وعلوم رجاجيل اخرى نذكرها -Reference Typeالمرجعية الثاـل . بمشيئة اهللالفئات والكائنات

الثوابت

رجم ع وع بشكل افتراضي، الثوابت العددية الصحيحة يتعامل معهـا المـت ى انهـا مـن الـن ، Integerـل :Doubleواالعداد العشرية من النوع

ArabicConole.WriteLine (10) ' Integer قيمة من النوع ArabicConole.WriteLine (5.5) ' Double قيمة من النوع

ذيل ـتخدام اـل وع "L"مع ذلك، يمكنك تحديد نوع الثابت لزيادة سرعة اسناد القيم، فتستطيع اس ،Long للـن

وع "D"، الذيل Short للنوع "S"الذيل ذيل Decimal للـن وع "F"، واـل ة (Single للـن راجـع بقـي ):MSDNاالختصارات في مكتبة

Dim X As Long Dim Y As Long X = 100 Y = 100L ' االسناد التايل اسرع وذلك لعدم اجراء التحويل الواسع

:# و #أو التاريخ بين الرمزين /ع قيمة الوقت و، فضDateوبالنسبة للثوابت التي تحمل النوع

Dim X As Date Dim Y As Date x = #1/29/2003# Y = #2/15/2003 9:30:00 PM#

فكرة الثوابت المسماة شبيه بفكرة المتغيرات، اال ان قيم الثوابت المسماة ال يمكـن تعـديلها وقـت

امج النهـائي التنفيذ، وذلك النها تستبدل بقيمها اثناء عملية ا ف البرـن لترجمة للبرنامج، ويتم حفظها في مـل : لتعريف ثابت جديدConstاستخدم الكلمة المحجوزة ). مثالEXEكـ (

Const PROGRAMMER_NAME = "عباس السريع" ArabicConsole.WriteLine(PROGRAMMER_NAME) ' عباس السريع

ارة تحديد نوع الثابت امر مفضل لزيادة السرعة، بينما ت العـب Optionيكـون الزامـي ان فعـل

Strict On: Const PROGRAMMER_NAME As String = "عباس السريع"

50 االساسيات: الجزء األولـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـ

ـيغة السـت عشـرية ة االعـداد بالص او Hexadecimalعودة الى الثوابت العدية، يمكنك كتاـب : قبل العدد-على التوالي– O& و H& باستخدام الرموز Octalالثمانية

صيغة ست عشرية 'ArabicConsole.WriteLine(&HFF) ' 255 صيغة مثانية 'ArabicConsole.WriteLine(&O10) ' 8

ذيل المناسـب Integer تكون من النوع -بشكل افتراضي –تذكر ان االعداد ـتخدام اـل ، لذلك ال تنسـى اس

:بة له حتى نخرج بالنتيجة المناس"L"للقيمة المناسبة، فالعدد التالي يفضل اسناد الذيل ArabicConsole.WriteLine(&HFFFFFFFF) ' -1 ArabicConsole.WriteLine(&HFFFFFFFFL) ' 4294967295

ـيغة السـت عشـرية ة Hexadecimalاخيرا، اليمكنك استخدام الص لالعـداد Octal او الثمانـي

:العشرية بودي ولكن لالسف غري ممكن 'ArabicConsole.WriteLine(&HFF.25)

يبات والمصفوفاتالترآ

ي ات، والـت ة تعـرف بالتركيـب عبر الزمن ومع االيام، ستبدأ بتعريف انواع خاصة بك في برامجك الجدـيوع . بقوةVisual Basic .NETيدعمها ات مـن ـن في هذا القسم من الفصل سـأتحدث عـن التركيـبEnum والتركيبات من نوع Structureكما سأخصص فقرة كاملة حول المصفوفات ،.

Enumالترآيبات من نوع

ـ ـندها اليهـا تعـرف باـل يمكنك تعريف نوع معين من انواع المتغيرات بحيث تحصر مجال القيم التي تسEnumeration . استخدم الكلمة المحجوزةEnum ـتوى الوحـدة ى مس د امـا عـل لتعريف تركيب جدـي

وع ، او خارج الوحدة البرمجية، او داخل تركيب اخـر ولكـن Moduleالبرمجية . Structureمـن الـن :هذا المثال عرفت فيه تركيب يمثل ايام االسبوع

Enum Day Saturday Sunday Monday Tuesday Wednesday Thursday Friday End Enum

لغة البرمجة: الثانيالفصل 51 ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــــ ـــ ــ ــ ـــ ــ ــ ـــ ـــ ــ ــ ـــ ـ

:واالن يمكنك استخدام التركيب السابق وتعريف متغيرات جديده منه Dim x As Day Dim y As Day x = Day.Friday y = x

مالحظة

ضـمن الثوابـت، فهـي آالثوابـت Enumتقنيا، تصنف الترآيبات من النوع

حيث ان قيمها تستبدل اثنـاء عمليـة -التي تطرقت لها سابقا-المسماة .الترجمة

: كوسيطات ترسلها الى االجراءاتEnumعمليا، ستستخدم التركيبات من نوع

Sub ShowDay(ByVal CurrentDay As Day) If CurrentDay = Day.Friday Then ArabicConsole.WriteLine("اجازة") End If … … End Sub

:ثم ترسل اليها المتغيرات من نفس نوع التركيب او قيم التركيب مباشرة

Dim X As Day X = Day.Friday ShowDay(X) ShowDay(Day.Friday)

:، مع ذلك يمكنك تخصيص قيم اخرى بكل انسيابية0تبدأ قيم عناصر التركيب من الرقم

Enum Day Saturday = 10 Sunday = 20 Monday Tuesday Wednesday Thursday Friday End Enum

ـيحمل القيمـة Mondayأن أي . مع العلم ان مقدار الزيادة لباقي عناصر التركيب هو واحـد ، و 21 س

Tuesday وهكذا ... ،22 سيحمل القيمة.

52 االساسيات: الجزء األولـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـ

ك Integerجميع القيم التي عرفتها في التركيبات السابقة هي من النوع ك يمكـن Visual، مع ذـل

Basic .NET من تغييرها الى Byte ،Short او ،Long رغم ان مستندات .NET ال تنصحك بعمـل : لعمل ذلكذلك اال عند وجود سبب مقنع

Enum Day As Long Saturday Sunday … … End Enum

القول ب : وللحديث عن مدى هذا النوع من المتغيرات، فاختصر عليك الكالم ـب ان عرفـت التركـي

ة Privateباستخدام الكلمة المحجوزة ، فان مدى هذا التركيب سيكون محصورا داخـل الوحـدة البرمجـيـيكون Publicيها هذا التركيب، اما ان استخدمت الكلمة المحجوزة الذي عرف ف ى تجاهلتهـا فس او حـت

:المدى شامال لباقي ملفات المشروع Module Module1 عام ' Enum GlobalEnum Enum1 Enum2 … End Enum عام ايضا ' Public Enum GlobalEnum2 Enum1 Enum2 … End Enum على مستوى الوحدة الربجمية' Private Enum PrivateEnum Enum1 Enum2 … End Enum … … End Module

مالحظة

ضا تعريف التكريبات من نوع اال خارج الوحـدات البرمجيـة، Enumيمكنك اي

اما . في هذه الحالةPrivateانك لن تستطيع استخدام الكلمة المحجوزة Structure داخـل ترآيبـات مـن نـوع Enumان عرفت الترآيبات مـن نـوع

.فالوضع سيكون مثل ما آان عليه مع الوحدات البرمجية

لغة البرمجة: الثانيالفصل 53 ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــــ ـــ ــ ــ ـــ ــ ــ ـــ ـــ ــ ــ ـــ ـ

، Publicمحجـوزة والتي تماثل الكلمة الFriendالمزيد ايضا، تستطيع استخدام الكلمة المحجوزة .اال ان االولى ال تسمح لك استخدام التركيب من خارج حدود المشروع

Structureالترآيبات من نوع

– User Defined Typesالمعرفـة مـن قبـل المسـتخدم يعرف هذا النوع من التركيبات باالنواع (UDT) ب او رات وضـمها فـي تركـي ة واحـدة ، بحيث تمكنك من دمج انواع مختلفة من المتغـي . كتـل

: لتعريف تركيب جديدStructureاستخدم الكلمة المحجوزة Structure Person Dim Name As String Dim Age As Integer End Structure

:ثم تعرف متغيرات جديدة من هذا التركيب وتتعامل معها كالمتغيرات العادية

Dim Turki As Person Turki.Name = " لعسرييترآي ا " Turki.Age = 99 ArabicConsole.WriteLine(Turki.Name) ' ترآي العسريي ArabicConsole.WriteLine(Turki.Age) ' 99

ة، شـريطة رات العادـي المزيد ايضا، يمكنك نسخ قيم التركيبات بانسيابية كاملة كما تفعل مع المتغـي

:ان تكون التركيبات متطابقة Dim Turki2 As Person Turki2 = Turki ArabicConsole.WriteLine(Turki2.Name) ' ترآي العسريي ArabicConsole.WriteLine(Turki2.Age) ' 99

وي بعضـها Nested يمكن ان تكون متداخلة Structureال تنسى ان التركيبات من نوع ، اي يحـت

:بعضا Structure Person Structure AddressStruct Dim City As String Dim Countrey As String End Structure Dim Name As String Dim Age As Integer Dim Address As AddressStruct End Structure

54 االساسيات: الجزء األولـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـ

:الوصول الى عناصر التركيب المحضون يتم من خالل التركيب الحاضن لها بكل منطقية Dim Turki As Person Turki.Name = "ترآي العسريي" Turki.Age = 99 Turki.Address.City = "الظهران" Turki.Address.Countrey = "اململكة العربية السعودية"

وع Visual Basic فـي Structureباالضافة الى المتغيرات، عليك معرفة ان التركيبات من ـن

.NET ت الموجودة في لغة مثل التركيبا( هي تركيبات مطورة ومرنة جداC++( ك مـن ، فهـي تمكـن :Properties والخصائص Methodsتعريف عناصر اضافية في داخل التركيب كالطرق

Structure Person Dim Name As String Dim Age As Integer تعريف طريقة ' Sub ShowData() ArabicConsole.WriteLine(Name) ArabicConsole.WriteLine(Age) End Sub End Structure

:مرة اخرى، يمكنك الوصول الى عناصر التركيب واستدعاء طرقه بنفس الطريقة االنسيابية

Dim Turki As Person Turki.Name = "ترآي العسريي" Turki.Age = 99 Turki.ShowData()

انظر ايضا

الفئـات الثالـث بشـكل مفصـل فـي الفصـل سأتناول الطرق والخصـائص

.والكائنات

ث فهي حـديث الفصـل (ال اريد ان اشتت تفكيرك االن بموضوع الطرق والخصائص كمـا الثاـل

ـيدات )ذكرت في المربع االعلى ا ان المش مدعومـة بشـكل Constructers، ولكن دعني المح لك هـنا ! ذا تقصد يا تركـي بكلمـة مخفـي؟ ما! يا الهى. Structureمخفي في التركيبات من النوع اقصـد ـي

ه؟ . معرف بشكل تلقائي في التركيب دون ان تراهـا Sub Newعزيزي ان االجراء م اخفاـئ ولمـاذا ـتدة . تقني بحت وال اود ان ابينه اال في الفصول الالحقـة سيديالسبب يا ه؟ الفاـئ دة مـن ـنا ومـا الفاـئ حس

د ببساطة اسناد قيم ابتدائية لمتغيرات التركي ا سـابقا عـن ب، فلو حاولت اسناد القيم وقت التصريح كما فعلـن :التصريح عن المتغيرات

لغة البرمجة: الثانيالفصل 55 ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــــ ـــ ــ ــ ـــ ــ ــ ـــ ـــ ــ ــ ـــ ـ

Structure MyStruct Dim x As Integer = 0 Dim y As Integer = 10 … … End Structure

ـبب منطقـي (سيظهر لك المترجم رسالة خطأ تفيد بانك ال تستطيع فعل ذلك ع ال رغم اني لم اجد س مقـن

ـيد المخفـي )يسمح لي بفعل ذلك ة Sub New، وهنا يأتي دور المش ـيم ابتدائـي ـناد ق ذي يقـوم باس اـلات Nothing للمتغيرات العددية، ال شئ للمتغيرات الحرفية، والقيمة 0(للمتغيرات ك، ). للكائـن مـع ذـل

ـيد ف مش دأ يعـرف Sub Newيمكنك تعرـي ق مـب ق تطبـي باعـادة التعريـف بنفسـك عـن طرـيOverloading) ـيطات ). ايضاالثالثوهو حديث الفصل اضـافية Parametersلعمل ذلك، اضف وس

:Sub Newمع االجراء Structure Person Dim Name As String Dim Age As Integer ' Overload اجراء متت اعادة تعريفه Sub New(ByVal PersonName As String) Name = PersonName ArabicConsole.WriteLine("مت تنفيذ املشيد") End Sub End Structure

ـتدعائه Sub Newرغم ان الوظيفة األساسية لالجراء ـتم اس ن ي ه ـل ـيد، اال اـن هي العمل كمش

دليل جـرب ة، واـل هـذا بمجرد انشاء كائن من التركيب فيما لو صرحت عن متغير جديد بالطرق التقليدـي :السطر

مع االسف الشديد، لن يتم تنفيذ املشيد 'Dim Turki As Person

ه Visual Basic .NETستالحظ ان ذكرت اـن ديهيا ان ـت دو ـب لم يقم بتنفيذ ذلك المشيد، والسبب قد يـبرجم اللغـة . تم تنفيذه بدال من مشيدنا الظريف) لكنه مخفي( اخر Sub Newيوجد مشيد غ مـت وحتى نبـل

ـتخدام الكلمـة المحجـوزة ان عل ا اس وارسـال Newيه تنفيذ مشيدنا الجديد، بدال من المشيد المخفي عليـن :الوسيطات التي توافق ذلك المشيد

سيتم تنفيذ املشيد مبجرد التصريح عن املتغري هنا 'Dim Turki As New Person("ترآي العسريي")

ـيئة الفئـات والكائنـات الثالث ق لها في الفصل لماذا؟ كيف؟ ومالسبب؟ كل هذه االستفسارات سأتطر بمش

ث انهـا ا، حـي ر مفهومـه هـن اهللا، لذلك اطلب منك عزيزي القارئ ان ال تقلق نفسك كثيرا باالشياء الغـيـيع الفصـل ث تتعلق بالكائنات وطريقة انشائها، وال اود نقل مواض ـتعلم الثاـل ا ن ـنحن مـا زلـن ا، ف هـن

.االساسيات

56 االساسيات: الجزء األولـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـ

رات لننتقل الى موضوع اخر ع المتغـي ب، فجمـي يتمحور حول قابلية الوصول الى عناصر التركـيا مـن الوصـول Dimالمحضونة في التركيبات السابقة عرفناها باستخدام الكلمة المحجوزة ذلك تمكـن ، ـل

ولكنك في بعض االحيان قد تود تعريف متغيرات مخفية ال يمكن الوصـول اليهـا اال مـن . الى عناصرها ر فـي Private، لذلك عليك استخدام الكلمة المحجوزة داخل التركيب نفسه اء التصـريح عـن متغـي اثـن

:داخل التركيب Structure Person Public Name As String ' هنا Dim مثل Public Dim Age As Integer Private MotherName As String Sub Test() MotherName = " !احم احم ميكن الوصول اىل املتغري املخفي ' " من داخل الرتآيب فقط ' … … End Sub End Structure

ـيفرة السـابقة، تسـمى محـددات الوصـول Private و Publicالكلمات المحجوزة Access في الش

Specifiers . يوجد نوع ثالث من محددات الوصول يستخدم الكلمة المحجـوزةFriend ل ه تماـث وظيفـتوع ال يمكـن الوصـول اليهـا مـن Publicوظيفة محدد الوصول ، اال ان عناصر التركيب من هذا الـن

).الذي عرف فيه التركيب(خارج حدود المشروع الحالي ة Structureاختم فقرة التركيبات من نوع ! طولناها وهي قصيرة ة الرؤـي بتوضيح مـدى و قابلـيوع لها والتي تماثل المدى و قاب ب . Enumلية الرؤية للتركيبات مـن ـن اء قـل ك مـن عـن ى اغنـي وحـت

ـتخدام الكلمـة المحجـوزة : الصفحات للبحث عنها، دعني اعيد صياغتها لك هنا ب باس ان عرفت التركـيPrivate فان قابلية الرؤية لهذا التركيب ستكون محصورة داخل الوحدة البرمجية الذي عرف فيهـا هـذا ،

ة شـاملة ) او حتى تجاهلتها (Publicدمت الكلمة المحجوزة التركيب، اما ان استخ ة الرؤـي فستكون قابلـي . ايضاFriendمع العلم انك تستطيع استخدام الكلمة المحجوزة . لباقي ملفات المشروع

المصفوفات

ي Visual Basic .NETيمكنك من تعريف المصفوفات سواء كانت احادية البعد او متعددة االبعاد والـت : بعدا32ل الى قد تص

Dim OneDim (9) As Integer ' 10عناصر Dim TwoDims (1, 1) As String ' 2 * 2 = 4عناصر

ة –يمكنك فورا البدء بعملية اسناد القيم لها رقيم -كما تفعل مع المتغيرات العادـي دء الـت م ان ـب مـع العـل

:0لفهرس المصفوفات يبدأ بالرقم

لغة البرمجة: الثانيالفصل 57 ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــــ ـــ ــ ــ ـــ ــ ــ ـــ ـــ ــ ــ ـــ ـ

OneDim (0) = 100 OneDim (1) = 200 … OneDim (9) = 900 TwoDims (0, 0) = "ترآي" TwoDims (0, 1) = "العسريي" TwoDims (1, 0) = "عباس" TwoDims (1, 1) = "السريع"

وان كنت مستعجال في عملية اسناد القيم، فإن هذا متاح لك في سطر التصريح مباشـرة، شـريطة

:عدم تحديد عدد عناصر المصفوفة Dim OneDim() As Integer = {1, 2, 3, 4, 5, 6, 7, 8, 9} Dim TwoDims(,) As String = {{"العسريي" ,"ترآي"}, {"السريع" ,"عباس"}}

ة م نحـدد عـدد Dynamics Arraysالمصفوفات السابقة تسمى مصـفوفات ديناميكـي ا ـل النـن

ـ ـتخدام عناصرها، الميزة في هذا النوع من المصفوفات هو امكانية تغيير حجمه ا مـن وقـت الخـر باسReDim مع االشارة إلى ان عناصر المصفوفة المعاد تغيير حجمها باستخدام ،ReDimسوف تلغى :

ReDim OneDim (99) ReDim TwoDims (10, 10) ArabicConsole.WriteLine ( OneDim(0) ) ' 0

ـ تخدام الكلمـة المحجـوزة مع ذلك، يمكنك تغيير حجم المصفوفة دون المخاطرة بفقد بياناتهـا باس

Preserve ر فقـط فـي هـذه -مع االسف الشديد –، ولكن ال يمكن تغيير اال عدد عناصر البعـد االخـي :الحالة

ممكن جدا 'ReDim Preserve OneDim (500) ReDim Preserve TwoDims (10, 500) رسالة خطأ 'ReDim Preserve TwoDims (500, 500)

ـتخدمت ومع االسف الشديد ايض ة سـواء اس Preserveا، ال يمكنك تغيير عدد ابعاد المصفوفة الديناميكـي

:او لم تستخدمها رسالة خطأ 'ReDim Preserve OneDim (500, 500) ReDim TwoDims (100)

ذاكرة في المقابل، تستطيع تدمير المصفوفة الديناميكية ده لتحرير المسـاحة فـي اـل فـي اي وقـت ترـي

:Erase باستخدام االمر Erase OneDim Erase TwoDims

58 االساسيات: الجزء األولـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـ

ك نسـخ Reference Typeعلى صعيد اخر، المصفوفات تعتبر من البيانات المرجعية فـال يمكـن، االساسـية الفئـات السادس حول المصفوفات في الفصل لي عودة"=". قيمها باستخدام معامل اسناد القيم

:()Cloneاخرى باستخدام الطريقة اما االن دعني اعرض لك كيف ننسخ قيمة مصفوفة الى Dim X () As Integer = {1, 2, 3, …} Dim Y () As Integer ' Y اىل X نسخ املصفوفة Y = X.Clone()

ر ()UBoundانهي حديثي عن المصفوفات بذكر الدالة التي تعود برقم فهـرس العنصـر االخـي

:ل برقم الفهرس للعنصر االو()LBoundللمصفوفة، والدالة For counter = LBound(OneDim) To UBound(OneDim) … … Next

:وبالنسبة للمصفوفات المتعددة االبعاد، يتوجب عليك ارسال رقم البعد الذي تود معرفة فهرسته

UBound(OneDim) ' البعد االول UBound(OneDim, 1) ' البعد االول UBound(OneDim, 2) ' الثانيالبعد

االجراءات والدوال

، Function او Sub من تعريف االجراءات امـا بالكلمـة المحجـوزة Visual Basic .NETيمكنك د حيث ان استخدامك للكلمة المحجوزة الثانية يجعل االجراء قادرا على العودة بقيمـة نوعهـا تحـدده عـن

:تعريف االجراء اجراء ال يعود بقيمة 'Sub MySub() ArabicConsole.WriteLine ("اجراء ال يعود بقيمة") End Sub دالة تعود بقيمة من '' Long النوع Function Abs (ByVal X As Integer) As Long If X < 0 Then Return -X Else Return X End If End Function

لغة البرمجة: الثانيالفصل 59 ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــــ ـــ ــ ــ ـــ ــ ــ ـــ ـــ ــ ــ ـــ ـ

: ترسلها لهاParametersقواس حتى لو لم توجد وسيطات عند استدعاء االجراءات، عليك كتابة اال سيقوم احملرر باضافة االقواس ان مل تضفها 'MySub () ArabicConsole.WriteLine (Abs (-5)) ' 5

ـتخدام Exit Subتستطيع انهاء االجراء في اي وقت باستخدام االمر ف باس او Sub ان تم التعرـي

Exit Function باستخدام ان تم التعريفFunction: Function Abs (ByVal X As Integer) As Long If X = 0 Then Exit Function End If … … End Function

مالحظة

دون تعيـين قيمـة للدالـة، فسـتعود Exit Functionان اسـتخدمت االمـر

ان Nothingيـة، او ان آانت عددية، الشـئ ان آانـت حرف 0الدالة بقيمة ..آانت آائنية

. كالمتغيراتPublic، او Friend، او Privateوبالنسبة لقابلية الرؤية فهي اما تكون

االرسال بالمرجع او القيمةرات ارسـلت بالقيمـة، وان اردت مـن بشكل افتراضي، الوسيطات التي يستقبلها االجـراء هـي متغـي

ـتخدم الكلمـة اجراءاتك ان تستقبل قيمها بالمرجع رات المرسـلة، اس ـيم المتغـي ك تعـديل ق حيث يمكـن :ByRefالمحجوزة

هنا بالقيمة ولن تتأثر املتغريات املرسلة 'Sub swapByVal(ByVal a As Integer, ByVal b As Integer) Dim temp As Integer temp = a a = b b = temp End Sub تتأثر املتغريات املرسلةاما هنا باملرجع وس ' Sub swapByRef(ByRef a As Integer, ByRef b As Integer) Dim temp As Integer temp = a a = b b = temp End Sub

60 االساسيات: الجزء األولـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـ

:يتضح الفرق في الشيفرة التالية Dim A As Integer Dim B As Integer A = 10 B = 20 ارسال بالقيمة 'swapByVal (A, B) ArabicConsole.WriteLine (A) ' 10 ArabicConsole.WriteLine (B) ' 20 باملرجعارسال ' swapByRef (A, B) ArabicConsole.WriteLine (A) ' 20 ArabicConsole.WriteLine (B) ' 10

رسـال وللحديث عن المسائل التقنية، سأبدا بعملية ارسال المتغيرات بالقيمـة، فهـي ابطـأ مـن اال ـتدعي االجـراء ة . بالمرجع وذلك النه سيتم انشاء نسخة من البيانات المرسلة في كل مـرة تس مـن ناحـي

امج ان اخرى، توجد ميزة في عملية ارسال المتغيرات بالقيمة، وهي عدم التأثير على باقي اجـزاء البرـن هو اسـرع مـن االرسـال -كما قلت قبل قليل–اما االرسال بالمرجع، . قمت بتعديل قيمها بطريق الخطأ

.بالقيمة، فانت ترسل مؤشر للمتغير مما يمكنك من تعديل قيمة المتغير المرسل

مالحظة المرسلة الى Reference Type Variablesالنسبة للمتغيرات المرجعية ب

االجراءات، ستتأثر بالتغييرات حتى وان ارسـلت بالقيمـة، اي باسـتخدام .ByValالكلمة المحجوزة

تخصيص الوسيطات المرسلة، اذ يمكنك من التصـريح عـن Visual Basic .NETالمزيد من التخصيص حول الوسيطات يوفره لك

.ParamArray والغير محدودة العدد Optionalالوسيطات االختيارية

:الوسيطات االختياريةرات المرسـلة شترط تاحيانا تود من اجراءاتك ان تكون مرنة بما فيه الكفاية بحث ال توافق عـدد المتغـية مـع Optionalمع عدد وسيطات االجراء، تستطيع استخدام الكلمة المحجوزة قبل كل وسيطة اختيارـي

:ضرورة تحديد قيمة افتراضية لها في حالة عدم ارسال قيمة لالجراء

لغة البرمجة: الثانيالفصل 61 ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــــ ـــ ــ ــ ـــ ــ ــ ـــ ـــ ــ ــ ـــ ـ

Sub MySub(Optional ByVal X As Integer = -1) If X = -1 Then ArabicConsole.WriteLine ("مل ترسل قيمة") End If … … End Sub

رة Optional، ال يمكنك استخدام الكلمة المحجـوزة اخرىنقطة ـيطات االخـي اي ( اال فـي الوس

:فال يمكن لوسيطة اختيارية ان تسبق وسيطة عادية) الموجودة في جهة اليمين هكذا ممكن 'Sub MySub(ByVal Y As Byte, Optional ByVal X As Integer = -1) … … End Sub انسى هذه الفكرة 'Sub MySub(Optional ByVal X As Integer = -1, ByVal Y As Byte) … … End Sub

:الوسيطات غير محدودة العدد

ن القيم سترسـل وتحفـظ فـي في هذه الحالة فانك ال تحدد عددا معينا للوسيطات التي يستقبلها االجراء، ال :ParamArrayمصفوفة تعرفها باستخدام الكلمة المحجوزة

Function Sum(ByVal ParamArray Nums() As Integer) As Integer Dim counter As Integer For counter = 0 To UBound(Nums) Sum += Nums(counter) Next End Function

:قيا، كل هذه االستدعاءات صحيحة باستثناء االخيرة الذي يتوقع انه اختياريتطبي

ArabicConsole.WriteLine ( Sum (1) ) ' 1 ArabicConsole.WriteLine ( Sum (2, 2) ) ' 4 ArabicConsole.WriteLine ( Sum (1, 2, 3, 4, 5) ) ' 15 خطأ هنا 'ArabicConsole.WriteLine ( Sum (1, , 3) )

Windows APIتجاوز الحدود مع

ي ! ، فاعتبر نفسك مبرمج محظوظ جـدا Windows APIان كنت ال تعرف ما هي اجراءات وبمـا انـن المخضـرمين، Windowsاما ان كنت مـن مبرمجـي . لست من المبرمجين الشجعان، فلن اتحدث عنها

NET.اطـار عمـل للتجـاوز حـدود عـالم Windows APIفتستطيع التصريح عـن اجـراءات Framework. لعمل ذلك، صرح عن االجراء باستخدام الكلمة المحجـوزة Declare وع د ـن مـع تحدـي

62 االساسيات: الجزء األولـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـ

ى Autoان استخدمت . Auto، او Ansi ،Unicodeصفحة المحارف اما ل الحـروف اـل ، سيتم تحوـيUnicode ـتثناء ى Windows ME و Windows 98 تحت جميع االنظمة باس ـتتحول اـل ث س حـي

Ansi: Module Module1 Declare Auto Function GetUserName Lib "advapi32.dll" Alias _ "GetUserNameA" (ByVal lpBuffer As String, _ ByRef nSize As Integer) As Integer Sub Main () … … GetUserName (x, y) End Sub End Module

التفرع والتكرار

في هـذا القسـم . الخوارزميات من الصعب تطبيقها برمجيا دون استخدامك لجمل التفرع وحلقات التكرار ى الحلقـات Select Case و If … Thenمن الفصل سنتوغل في عبارات التفرع ، كما سـأتطرق اـل

.Visual Basic .NETالتكرارية المختلفة المتوفرة في لغة البرمجة

If … Thenالتفرع باستخدام م تلحقهـا بكلمـة Ifاستخدم الكلمة المحجوزة ـتخدام Then لتضيف اليها جملة شرطية ـث ، وال تنسـى اس

End If وهو المفضل( ان وزعت اوامر الشرط في اكثر من سطر(: يف سطر واحد 'If X = 0 Then Y = 1 If X = 1 Then X = 2 : Y = 4 If Y = 1 Then X = 0 Else X = 2 يفضل توزيعها هكذا 'If X = 0 Then Y = 1 End If If X = 1 Then X = 0 Y = 4 End If If Y = 1 Then X = 0 Else X = 2 End If

لغة البرمجة: الثانيالفصل 63 ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــــ ـــ ــ ــ ـــ ــ ــ ـــ ـــ ــ ــ ـــ ـ

مالحظة

بحيث يمكنـك مـن دمـج عـدة اوامـر فـي " _"عكس المعامل ":" المعامل .سطر واحد

ك End Ifفضل استخدام الصيغة الموزعة واغالقها ـب ذكرت مرتين ان الم حيث انها تسـهل علـي :قراءة وفهم منطق التفرع خاصة ان كانت جمل الشرط متداخلة، ركز معي يا حلو في هذه الجمل

If X = 0 Then If Y = 0 Then X = 100 End If Else Y = 1 End If

دعي (صار الجمل السابقة في سطر الواحد قد يأتي شخص مصمم على اخت رف كمـا ـي ) فهو مبرمج محـت

:ويكتب شيئا مثل If X = 0 Then If Y = 0 Then X = 100 Else Y = 1

ث ان ! انصحك بعدم االستماع له مادام الحمام يغرد ة، حـي ا فـي اهللا خاطـئ فمنطق التفرع في جملة اخيـن

: سيفهمها على انهاVisual Basic .NETاالول، اي ان االخيرة تتبع للشرط الثاني وليس Elseكلمة If X = 0 Then If Y = 0 Then X = 100 Else Y = 1 End If End If

ـيغة : وحتى ال نضيع وقتنا الثمين في مثل هذه السجاالت، ساغلق الموضوع بنصيحة ـتخدم الص اس

. أمر واحد فقطيحتوي علىحتى لو كان جواب دائما If … Then … End Ifالمفرقة

:ادوات الربط المنطقيبطالقة كاملة كمـا تفعـل مـع لغـات ) الخ ...And ،Or ،Not( يمكنك استخدام ادوات الربط المنطقي

:Visual Basic .NETالبرمجة االخرى، حيث انها مدعومة في If x > 0 And t < 1 Then … … End If If Not Y > 1 Then …

64 االساسيات: الجزء األولـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـ

:دعنا نلهو قليال في علم المنطق الرياضي، واطلب منك التركيز في الشرط التالي If X <> 0 And 10 \ X = 2 Then

ت ال تسـاوي Xلغويا، الشرط السابق يختبر قيمة المتغير ت تسـاوي الصـفر ام ال، وان كاـن ما اذا كاـن

ر مع ذلك، فإن الشيفرة الس. صفر فستختبر ناتج القسمة Xابقة ستظهر رسالة خطأ ان كانت قيمـة المتغـيرض مـن . سيجري عملية القسمة دائماVisual Basic .NETتساوي صفر، والسبب ان ا، يفـت منطقـي

Visual Basic .NET ر ت قيمـة المتغـي تسـاوي X ان ال يتعب نفسه ويجري عملية القسمة ان كاـنع الجمـل Andتقنيا، المعامل . )خاطئة (Falseصفر، والسبب ان العبارة ستكون دائما يقوم باختبار جمـي

:ت في مثل هذه الحاالAndAlsoالشرطية التي حوله، لذلك ينصح باستخدام المعامل If X <> 0 AndAlso 10 \ X = 2 Then

ة Visual Basic .NET في الجملة السابقة تساوي صفر، فان Xان كانت قيمة المتغير لن يكمل عملـي

.ية القسمة مما يجنبنا ظهور رسالة الخطأالتحقق من عملاني ان OrElse يوجد معامل اخر هو AndAlsoالى جانب المعامل والذي سيتخطى الشـرط الـث

:Trueكان االول لن يتم التحقق من الشرط الثاني '' X ان آان العدد يف املتغري موجب 'If X > 0 OrElse Y < 0 Then …

ة فقـط، وان OrElse و AndAlsoعليك معرفة ان المعـامالت ـيم المنطقـي تتعامـل مـع الق

ة (استخدمت االعداد ـتعتبر اي قيمـة ) Option Strict Offستجرى عملية التحويل التلقائي في حاـل فسي تكـون العـدد Or و And، بينما المعامالت Trueغير الصفر ذلك تسـمى – تختبر البتات الـت -bitـل

wise operatorsالية، فجملة الشرط الت: x = 3 y = 12 If x <> 0 And y <> 0 Then … ' True

: لتعطي نتيجة مماثلةAndAlsoيمكنك اختصارها بالمعامل

عملية املقانة ختترب القيم '' True And True = True If x AndAlso y Then …

:تيجة خاطئة الى اختبار البتات المكونة لالعداد، لتعطي نAndبينما يؤدي استخدام المعامل

عملية املقارنة ختترب البتات '' 0011 And 1100 = 0000 (False) If x And y Then …

لغة البرمجة: الثانيالفصل 65 ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــــ ـــ ــ ــ ـــ ــ ــ ـــ ـــ ــ ــ ـــ ـ

ـتخدام ه ان اخفقـت كلهـا باس ذ اوامـر معيـن اخيرا، يمكنك اختبار مجموعة جمل شرطية وتنفـيElseIf:

If X = 1 Then … ElseIf X = 2 Then … ElseIf X = 3 Then … Else … End If

Select Caseالتفرع باستخدام

:تطبيقه بسهولة تامة يمكنSelect Caseالتفرع باستخدام Dim X As Integer … … Select Case X Case 1 ArabicConsole.WriteLine ("حمرم") Case 2 ArabicConsole.WriteLine ("صفر") … … Case 12 ArabicConsole.WriteLine ("ذو احلجة") Case Else ArabicConsole.WriteLine ("غري معرف") End Select

وب Select Caseتكمن قوة العبارة في تطبيق المعامالت المنطقية او تحديد مجاالت للقيم المطـل

:التحقق منها Dim Grade As Integer … … Select Case Grade Case Is < 60 ArabicConsole.WriteLine ("راسب") Case 60 To 69 ArabicConsole.WriteLine ("مقبول") Case 70 To 79 ArabicConsole.WriteLine ("جيد") Case 80 To 89 ArabicConsole.WriteLine ("جيد جدا") Case Is >= 90 ArabicConsole.WriteLine ("ممتاز") End Select

66 االساسيات: الجزء األولـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـ

:المزيد ايضا، يمكنك استخدام الفاصلة بمرونة كاملة، وبنفس المنطق السابق Dim Letter As Char … … Select Case Letter Case "A"c To "Z"c, "a"c To "z"c ArabicConsole.WriteLine ("حرف اجبدي") Case "0"c To "9"c ArabicConsole.WriteLine ("عدد") Case "."c, ":"c, " "c, ";"c, "?"c ArabicConsole.WriteLine ("رمز") Case Else ArabicConsole.WriteLine ("غري معروف") End Select

: المنطقيةOrة الربط الفاصلة التي استخدمناها المثال السابق تمثل ادا

Select Case True Case x > 0, Y < 0 تعادل ' ' If (X > 0) Or (Y < 0) … End Select Select Case False Case x > 0, Y < 0 تعادل ' ' If ( Not (X > 0) ) Or ( Not (Y < 0) ) … End Select

الحلقات التكرارية

:For … Nextلقيمة االبتدائية والنهائية لحلقة حدد ا Dim counter As Integer For counter = 2 To 4 ArabicConsole.WriteLine(counter) ' ثالث مرات Next

:Stepتستطيع التحكم في مقدار الزيادة اوالنقصان باستخدام

For counter = 5 To 1 Step -1 … Next

لغة البرمجة: الثانيالفصل 67 ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــــ ـــ ــ ــ ـــ ــ ــ ـــ ـــ ــ ــ ـــ ـ

:بارك ان متغير الحلقة سيزيد او ينقص بالمقدار المحدد حتى بعد نهاية الحلقةضع في اعت For counter = 5 To 1 Step -1 … Next 1 وليس 0قيمة العداد ' ArabicConsole.WriteLine(counter) ' 0

ة هـو المزاح مع متغير الحلقة داخل الحلقة فيه شئ من الخطر، فعدد مرات التكرار للحلقة التا لـي

:واحد فقط For counter = 1 To 100 counter = 100 … Next

:Exit Forوقبل انتهاء المدة االفتراضية للحلقة، يمكنك قطعها وانهائها بعبارة

For counter = 1 To 50 … If y = 10 Then Exit For End If … Next

او المجموعـات Arrays تطبق على المصـفوفات For Eachجميلة جدا تعرف ـب حلقة اخرى

Collections: Dim x(5) As Integer Dim y As Integer … … For Each y In x ArabicConsole.WriteLine(y) Next

مالحظة

آثيـرا هـذه االيـام حتـى For Eachن آنت مبتدءا، فال تستخدم الحلقة ا

، حيـث الواجهـات، التفـويض، والمواصـفات الخامسى الفصل تصل ال صيل عن استخدام هذه الحلقة .ستجد المزيد من التفا

68 االساسيات: الجزء األولـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـ

ث Do … Loopوعند الحديث عن الحلقات الالنهائية، فلن تجد افضل من حلقة المرنة جـدا، حـي قة مرة واحدة على االقـل ليتم تنفيذ اوامر الحل(تمكنك من وضع الشرط اما في اعلى الحلقة او في اسفلها

ى Untilان استخدمت الكلمة المحجوزة ). في حالة وضع الشرط اسفل الحلقة ، سيتم تكـرار الحلقـة حـت هي المرافقة، فسيتم تكرار الحلقة ما دامـت While، اما ان كانت الكلمة المحجوزة Trueيصبح الشرط :Trueقيمة الشرط

Do Until MsgBox("ي احللقة؟ا", MsgBoxStyle.YesNo) = MsgBoxResult.Yes … Loop Do While MsgBox("ي احللقة؟ا", MsgBoxStyle.YesNo) = MsgBoxResult.No … Loop

.Exit Doاخيرا، تستطيع في اي لحظة الخروج من الحلقة باستخدام العبارة

:Do … Loop و For … Nextالتبديل بين

ى Do … Loop الى حلقة For … Nextتستطيع تحويل حلقة اه اـل والعكس صحيح، لكن عليك االنتـب تمثل عدد التكرار حتى وان تغيرت داخـل الحلقـة، For … Nextان القيم التي تحددها في بداية الحلقة

:فبالرغم من ان الحلقتين التاليتين متشابهتين A = 5 ' For … Next حلقة For counter = 1 To A … Next ' Do … Loop حتويلها اىل counter = 1 Do … counter = counter + 1 Loop Until counter > A

ى Aاال ان االختالف سيظهر في حال ما اذا تم تغيير قيمة المتغير ـيتم For … Next، فالحلقة االوـل س

ر في داخل الحلقة، بينAتنفيذها دائما خمس مرات حتى وان تغيرت قيمة المتغير ر قيمـة المتغـي ما تغيـي . Do … Loopيؤثر بشكل كبير على عدد مرات تكرار الحلقة االخرى

لغة البرمجة: الثانيالفصل 69 ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــــ ـــ ــ ــ ـــ ــ ــ ـــ ـــ ــ ــ ـــ ـ

Namespacesمجاالت االسماء امج Namespacesالفكرة من مجاالت االسماء ع االسـماء المتشـابهة لمعرفـات البرـن تقتضـي توزـي

خ ... Structures، التركيبات Modules، الوحدات البرمجية Classesكاسماء الفئات ( ى ) اـل ل اـل كـتى مجموعـات، Namespaceمختلفة تسمى مجال االسماء ب اسـمائها عـل ك ترتـي ، بحيث تسـهل علـي

:Mouseر باسم أفلو عرفنا تركيب للف. وتمكنك ايضا من تعريف اسماء متشابهه لمعرفات مختلفة Structure Mouse … … End Structure

ـنفس االسـم -يمثل جهاز الفـأرة - االسم لتعريف تركيب اخر فال يمكننا استخدام نفس ذلك . Mouse ب ـل

.سنقوم بتعريف مجاالت اسماء مختلفة

تعريف مجال اسماءك معرفـة ان المشـروع ك، علـي ذي Projectقبل ان تبدأ بتعريف مجاالت اسماء خاصة ـب الحـالي اـل

ر . اسـم المشـروع نفـس -بشكل مبدئي-تصممه قد عرف مجال اسم جديد، ويكون اسمه ك تغيـي يمكـنة Project Property Pagesمجال االسم من نافذة Root، ومن ثم كتابة اسم مجال االسماء فـي خاـن

namespace ) 5-2شكل(.

. للمشروعالجذري تسيمة مجال االسماء :5-2شكل

70 االساسيات: الجزء األولـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـ

ع المعرفـات هذا االسم الذي اخترته يمثل مجال االسماء الجذري والرئيسـي للمشـروع الحـالي، و جمـي . ضمن حيز هذا المجال-ان صح التعبير-ومجاالت االسماء االخرى تابعة او داخلة

برمجيا، يمكن تعريف المزيد من مجاالت االسماء في داخل مشروعك باستخدام الكلمـة المحجـوزة Namespace وتذييل المجال بالعبارة End Namespace:

Namespace Devices … … End Namespace

ي يمكنك البدء باضافة كل المعرفات التي ترغب بحضنها داخـل هـذا المجـال، والمعرفـات الـت

ات ، او وحـدات برمجـة Classesيمكنك تعريفها في داخل مجال االسـماء هـي امـا أن تكـون فـئModules او تركيبات ،Structures او واجهات ،Interfaces او تركيبات من النوع Enumفقط :

Namespace Devices Structure Mouse … … End Structure Structure Printer … … End Structure … … End Namespace Namespace Animals Structure Mouse … … End Structure Structure Cat … … End Structure … … End Namespace

انظر ايضا

، الفئات والكائنـات الثالث في الفصل Classesسيتم الحديث عن الفئات

ــات ــل Interfacesوالواجه ــي الفص ــامس ف ــات الخ ــويض،الواجه ، التفسـواء آانـت - والترآيبـات Modulesاما الوحـدات البرمجيـة . والمواصفات

Enums او Structuresفقد فصلتها سابقا في هذا الفصل .

لغة البرمجة: الثانيالفصل 71 ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــــ ـــ ــ ــ ـــ ــ ــ ـــ ـــ ــ ــ ـــ ـ

:Nestedاخيرا، مجاالت االسماء ممكن ان تكون متداخلة Namespace Devices Namespace Inputs Structure Mouse … … End Structure Structure Keyboard … … End Structure … … End Namespace Namespace Outputs Structure Monitor … … End Structure Structure Printer … … End Structure … … End Namespace … … End Namespace

الوصول الى عناصر مجال االسماء

:كل ما هو مطلوب منك تحديد اسم مجال االسماء ومن ثم ذكر المعرف الذي ترغب في استخدامه

Dim X As Animals.Mouse Dim Y As Devices.Mouse … …

ب وبالنسبة لمجاالت االسماء المتداخلة، ع ـنفس الترتـي ـنة لهـا، وب ليك ذكر جميع المجاالت الحاض

: متداخلةStructuresللوصول إلى عناصر تركيبات الذي تتبعه المنطقي Dim X As Devices.OutPuts.Printer Dim Y As Devices.OutPuts.Screen Dim Z As Devices.Inputs.Keyboard

72 االساسيات: الجزء األولـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـ

، امـا إن )كما في االمثلة السـابقة (خارج المجال فقط استخدم االسم الكامل لمجال االسماء ان كنت :كنت داخل المجال فاليوجد داعي لتحديد اسم المجال الحالي

' Devices.Inputs داخل جمال االمساء Dim X As Keyboard Dim Y As Mouse Dim Z As OutPuts.Printer ' هنا استخدمت جمال خارجي اخر

Importsاستيراد مجال اسماء باستخدام

ث يقصد بجملة استيراد مجال اسماء اي تضمين مجال اسماء معين ودمجه في مجال االسماء الحـالي بحـي :يمكنك الوصول الى جميع عناصره دون الحاجة لاللتزام بالصيغة الكاملة السم المجال، فالشيفرة التالية

Dim X As Devices.OutPuts.Printer Dim Y As Devices.OutPuts.Screen Dim Z As Devices.Inputs.Keyboard

:Imports باستخدام الكلمة المحجوزة Devicesيمكنك اختصاره باستيراد المجال

Imports MyNameSpace.Devices … … Dim X As OutPuts.Printer Dim Y As OutPuts.Screen Dim Z As Inputs.Keyboard

:يراد المجاالت الفرعيةبل تستطيع اختصاره اكثر من ذلك ايضا باست

Imports MyNameSpace.Devices.OutPuts Imports MyNameSpace.Devices.Inputs … … Dim X As Printer Dim Y As Screen Dim Z As Keyboard

مالحظة

، البـد مـن آتابـة االسـم Importsعند استيراد مجال اسـماء باسـتخدام

). م مجال االسماء الذي يحتضنهبما في ذلك اس(الكامل لمجال االسماء ففي الشيفرات السابقة، استخدمنا مجـال االسـماء الجـذري للمشـروع

MyNameSpaceفي آل مرة استوردنا فيها مجال اسماء .

لغة البرمجة: الثانيالفصل 73 ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــــ ـــ ــ ــ ـــ ــ ــ ـــ ـــ ــ ــ ـــ ـ

ع مجـاالت االسـماء فـي ـتيراد جمـي قد تفتح شركة استيراد وتصدير في احد االيام، وتحاول اس :رة ان حدث تعارضات، فلو حاولت استيراد هذين المجالينبرامجك، ولكنك ستصاب بخيبة امل كبي

Imports MyNameSpace.Animals Imports MyNameSpace.Devices.Inputs Dim X As Mouse

وان كـان هـذا . في كال المجـالين Mouseسيظهر لك المترجم رسالة خطأ بسبب تعارض اسم التركيب

ف سيسبب خسارة لشركة االستيراد والتصدير ا لخاصة بك، فيمكنك االلتفاف حول هـذا التعـارض بتعرـي :مجال اسماء مؤقت

Imports MyNameSpace.Animals Imports tmp = MyNameSpace.Devices.Inputs Dim X As Mouse Dim Y As tmp.Mouse

رامج اخـرى ات (اخيرا، ان اردت استيراد مجاالت اسـماء لمشـاريع وـب ة فـئ NET.كمكتـب

Framework( عليك اضافة مرجع لهذه المجاالت في خانة المراجع مـن نافـذة مستكشـف المشـروع Solution Explorer ) 6-2شكل(.

. ادراج مراجع اضافية لمجاالت اسماء اخرى في المشروع الحالي:6-2شكل

Importsاستيراد مجال اسماء دون استخدام

ـتيراد مجـاالت ارة (اسـماء طريقة غير برمجية اخرى تمكنك مـن اس ـتخدام عـب اي دون الحاجـة السImports ( ة ق خاـن وذلك باضافة جميع مجاالت االسماء التي تود استيرادها فـي برنامجـك عـن طرـي

ـندوق الحـوار Importsالتبويب فـي الصـفحة 7-2شـكل ( Project Property Pages فـي ص .)المقابلة

74 االساسيات: الجزء األولـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ـــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـــ ــ ــ ـ

.Importsاستيراد مجال اسماء دون استخدام :7-2شكل

ا مجموعـة مـن . Visual Basic .NETكان هذا الفصل نهاية البداية التقان لغة البرمجـة تبقـى لـنــة ــرى كالوراث ــات Inheritanceالمواضــيع االخ ، Attributes، المواصــفات Interfaces، الواجه

ـتيعاب فكـرة . لنكمل مرحلة تعلم االساسية Delegatesوالتفويض ولكن قبل ذلك، مـن المهـم جـدا اس . عنوان الفصل التاليالفئات والكائنات