learen c sharp fully

86
ﺷﺎرب اﻟﺴﻲ ﻓﻲ اﻟﻜﺎﻣﻞ اﻷول اﻟﺪرس اﻟﺮﺣﻴﻢ اﻟﺮﺣﻤﻦ اﷲ ﺑﺴﻢ اﻟﻤﺤﺎﺿﺮة اﻷوﻟﻰ: اﻟـ ﺗﺎرﻳﺦ. NET ﻣﻨﺬ اﻟﺤﺎﺳﻮب ﺻﻨﺎﻋﺔ ﺑﺪاﻳﺔ: - اﻷﻣﺮ ﺑﺪاﻳﺔ ﻓﻲ ﺑﺘـﺼﻤﻴﻢ ﻗـﺎﻣﻮا اﻟﻠـﺬﻳﻦ واﻟﻌﻠﻤـﺎء واﻟﻤﺼﻤﻤﻴﻦ اﻟﻤﻬﻨﺪﺳﻴﻦ ﺑﺈﺳﻢ ﻋﺮﻓﻮا أﻧﺎس ﺧﺮج ﻋﻠﻰ إﺣﺘﻮى ﺿﺨﻢ ﺟﻬﺎز ذﻟﻚ ﻋﻦ ﻧﺘﺞ وﻗﺪ اﻟﺤﺎﺳﻮب ﺟﻬﺎز وهﻴﻜﻠﺔ5 اﻟﻜﺒﻴﺮ اﻟﻨﻮع ﻣﻦ ﺗﻘﺮﻳﺒﺎ ﻃﻮاﺑﻖ. وآﺎﻧﺖ ﻋﻠﻰ اﻟﻜﺘﺎﺑﺔ ﻃﺮﻳﻘﺔ وإزاﻟﺔ اﻟﻤﻌﻠﻮﻣﺎت ﺿﺨﺎﻣﺔ إﺛﺮ ﻧﺘﺠﺖ ﻗﺪ ﺁﻟﻲ ﺣﺎﺳﺐ ﺟﻬﺎز إﻧﺸﺎء ﻜﺮة اﻷرﺑﻌﺔ اﻟﺤﺴﺎﺑﻴﺔ ﻟﻠﻌﻤﻠﻴﺎت اﻟﻜﺒﻴﺮ اﻟﻮﻗﺖ وإزاﻟﺔ اﻟﻮرق. - اﻟﺜﻨﺎﺋﻴﺔ اﻟﻠﻐﺔ ﻃﺮﻳﻖ ﻋﻦ ﺗﺒﺮﻣﺞ ﻟﻠﺤﺎﺳﻮب اﻷﺳﺎﺳﻴﺔ اﻟﻌﻤﻠﻴﺎت آﺎﻧﺖ0,1 ﻟـﻢ اﻟﺤﺎﺳـﻮب ﺟﻬـﺎز ﻷن اﻟﻠﻐﺔ هﺬﻩ ﺳﻮى ﻳﻔﻬﻢ ﻳﻜﻦ. - ﻇﻬﺮت ﺛﻢ ﺑـﺎﻷﺳﻤﺒﻠﻲ اﻟﻤﻌﺮوﻓﺔ اﻟﺘﺠﻤﻴﻊ ﻟﻐﺔAssembly . - IBM اﻟﺸﺮآﺎت ﻣﻦ آﺎﻧﺖ اﻟﺘﻲ ﻓﻴـﻪ ﺗـﻀﻊ و ﺁﻟﻲ ﺣﺎﺳﺐ ﺟﻬﺎز ﺗﺼﻤﻢ آﺎﻧﺖ ﺑﺤﻴﺚ اﻟﻤﺠﺎل هﺬا ﻓﻲ ﺻﻐﻴﺮ ﺗﺸﻐﻴﻞ ﻧﻈﺎمOperating System ( O.S ) ﻧﻈـﺎم ﻣـﺼﻄﻠﺢ ﺗﻄـﻮر إﻟـﻰ ﺑﻌﺪ ﻓﻴﻤﺎ أدت واﻟﺘﻲ اﻟﺘﺸﻐﻴﻞO.S ﺗﻄﻮﻳﺮﻩ إﻟﻰ واﻟﺤﺎﺟﺔ. - اﻟﺘﺸﻐﻴﻞ ﻧﻈﺎم وﻣﻌﻨﻰ: ه اﻟﺤﺎﺳـﻮب ﻟـﺪى اﻟﻤﻮﺟـﻮدة اﻟﻬـﺎردوﻳﺮ أﺟﻬـﺰة ﻳـﺴﺘﺨﺪم اﻟـﺬي اﻟﻨﻈﺎم اﻟﻜﻔﺎءة ﻣﻦ ﻣﻤﻜﻦ ﻗﺪر أآﺒﺮ ﻋﻠﻰ ﻟﻠﺤﺼﻮل ﺑﺈﺳﺘﻐﻼﻟﻬﺎ ﻳﻘﻮم ﺑﺤﻴﺚ ﺑﻬﺎ وﻳﺘﺤﻜﻢ. - اﻟﺠﺎﻣﻌﺎت إﺣﺪى ﻣﻦ ﻃﺎﻟﺒﻴﻦ ﻇﻬﺮ اﻟﻮﻗﺖ ذﻟﻚ ﻓﻲ ﻣﻦ ﻧﻤﻜﻨﺎ ﺧـﺎص ﺗـﺸﻐﻴﻞ ﻧﻈـﺎم وﺗـﺼﻤﻴﻢ ﻄﻮﻳﺮ ﺑﻬﻤﺎ ﺑﺈﺳﻢ ﻋﺮفDOS . - ﺷﺮآﺔ ﻧﻈﺮت ﻋﻨﺪﻣﺎIBM اﻟﻨﻈﺎم إﻟﻰ ﺑﺎﻟﻜﺎﻣﻞ ﻧﻈﺎﻣﻬﻤﺎ ﺗﺒﻨﺖ اﻟﻄﺎﻟﺒﻴﻦ هﺬﻳﻦ ﺑﻮاﺳﻄﺔﻤﻢ اﻟﺬي ﺗﺸﺠﻴﻌﻬﻤﺎ ﻋﻠﻰ وﻋﻤﻠﺖ. - ﻳﺪﻋﻰ اﻟﻨﻈﺎم آﺎنDOS وآﻠﻤﺔDOS اﻟﻤﺨﺘـﺼﺮة اﻟﺠﻤﻠـﺔ ﻣﻦ ﺟﺎءتDisk Operating System اﻟﺘﺸﻐﻴﻞ ﻧﻈﺎم ﻗﺮص وﻣﻌﻨﺎهﺎ. - أ ﺣﻴـﺚ ﻃﻮﻳﻠـﺔ ﺳـﻄﻮرهﺎ وﻋـﺪد ﻃﻮﻳﻠـﺔ اﻟﺠﻤﻞ وآﺎﻧﺖ ﺻﻌﺒﺎ اﻟﻌﻤﻞ آﺎن اﻷﺳﻤﺒﻠﻲ ﻟﻐﺔ ﺑﻮاﺳﻄﺔ ن وﺣـﺬف وﺟﻤـﻊ وﺿـﻊ ﺧـﻼل ﻣـﻦ ﻣﺒﺎﺷﺮة اﻟﺬاآﺮة ﻣﻊ ﻳﺘﻌﺎﻣﻞ آﺎن اﻟﻤﺒﺮﻣﺞ.. اﻟـﺦ آـﺎن ﻓﻘـﺪ ﻟـﺬﻟﻚ، ﻳﻜﺘﺐ أن آﻠﻤﺔ ﻟﻄﺒﺎﻋﺔ ﻣﺜﻼ اﻟﻤﺒﺮﻣﺞ ﻋﻠﻰ ﻳﺘﻮﺟﺐ15 أو20 ﺳﻄ ذﻟﻚ ﻟﺘﻨﻔﻴﺬ. آـﺎن ﻟـﺬﻟﻚ ﻧﺘﻴﺠﺔ و إﻳﺠﺎ ﻣﻦ ﻻﺑﺪ د ﻃﺮﻳﻘﺔ ﺑﺈﺑﺘﻜﺎر ﻓﻘﺎﻣﻮا اﻟﺒﺮﻧﺎﻣﺞ ﺣﺠﻢ ﻣﻦ واﻟﺘﻘﻠﻴﻞ اﻟﻮﻗﺖ ﻟﺘﻮﻓﻴﺮ ﺟﺪﻳﺪة ﻃﺮﻳﻘﺔ ﺪﻳﺪة اﻟﺪوال ﻃﺮﻳﻘﺔ وهﻲProcedure ﻣﻦ أآﺜﺮ ﺑﻮﺿﻊ ﻗﺎﻣﻮا ﺣﻴﺚInstruction ﻤﻜﺎن ﻓﻘﻂ واﺣﺪ، وﻣﻦ ﺑﺈﺳـﻢ ﻓﻌﺮﻓـﺖ اﻟﺒﺮﻣﺠﺔ وﺗﻄﻮرت داﻟﺔ ﻣﻦ أآﺜﺮ ﺗﻀﻢ اﻟﺘﻲ اﻟﻤﻜﺘﺒﺎت ﻣﻔﻬﻮم ﻧﺸﺄ هﻨﺎStructured Programming اﻟﺘﺮآﻴﺒﻴﺔ اﻟﺒﺮﻣﺠﺔ وﻣﻌﻨﺎهﺎ. ﻣﺜـﻞ ﻟﻐـﺎت ﻋﺪةﻮرت ﻟﺬﻟﻚ ﻧﺘﻴﺠﺔCOBOL وﻟﻐـﺔC اﻟ و ﺸﻬﻴﺮةFORTRON اﻟﺒﺮﻣﺠﺔ ﻟﻠﻐﺎت اﻟﺜﺎﻟﺚ ﺑﺎﻟﺠﻴﻞ ﻋﺮﻓﺖ واﻟﺘﻲ. - اﻟـﺼﻮر ﻳـﺴﺘﺨﺪم آـﺎن ﻓﻘﺪ ﻧﻮﻋﻪ ﻣﻦ ﻓﺮﻳﺪ ﻧﻈﺎم ﺗﻄﻮﻳﺮ ﻋﻠﻰ ﻋﻤﻠﺖ ﻗﺪ ﻣﺎآﻨﺘﻮش أﺑﻴﻞ ﺷﺮآﺔ آﺎﻧﺖ اﻷﻋﻤﺎل ﻋﻠﻰ ﻟﻠﺪﻻﻟﺔ ﺑﺒﺮﻣﺠﺔ ﻓﻘﺎﻣﺖ، اﻟﻤﺠﻠﺪ وﺷﻜﻞ اﻟﻤﻠﻒ ﺷﻜﻞ... إﻟـﺦ، اﻟـﺸﺎﺷﺔ ﺑـﺪل وذﻟـﻚ اﻟﻮﻗ ذﻟﻚ ﻓﻲ ﻣﻌﺮوﻓﺔ آﺎﻧﺖ اﻟﺘﻲ اﻟﺴﻮداء واﻟﻤـﺴﻤﺎةCommand Prompt ﺗـﻢ اﻟﻨﻈـﺎم وﺑـﺬﻟﻚ اﻟــ ﻣﻌﺮﻓـﺔInterface آﺎﻧـﺖ واﻟﺘـﻲ اﻟﻮاﺟﻬـﺔ وﻣﻌﻨﺎهـﺎUser-Friendly ﻣـﻊ اﻟﺘﻔﺎﻋـﻞ آـﺎن ﺣﻴـﺚ اﻟﺮﺳﻮﻣﺎت ﺧﻼل ﻣﻦ ﻣﺒﺎﺷﺮا ﺗﻔﺎﻋﻼ اﻟﻤﺴﺘﺨﺪم. - ﺷﺮآﺔSUN اﻟﻤﻔﺘﻮح اﻟﻨﻈﺎم ﺗﻤﺘﻠﻚ آﺎﻧﺖOpen Source ﻳـﻮﻧﻴﻜ اﻟﻤـﺴﻤﻰ ﺻـﺎﻧﻌﻪ إﻟـﻰ ﻧـﺴﺒﺔ ﺑﺘﺸﻜﻴﻞ وﻗﺎﻣﺖ ﻟﻴﻨﻜﺲ ﺑﺈﺳﻢﺮف ﺟﺪﻳﺪ ﻈﺎم ﻋﻤﻠﻪ ﻓﻲ اﻟﻮاﺟﻬﺎت ﻳﺴﺘﺨﺪم. - ﻣﺜـﻞ اﻟـﺸﺮآﺎت آﺒﺮﻳـﺎت واﺳـﻄﺔ ﻣﻦ آﺎﻣﻞ ﺗﺸﻐﻴﻞ ﻧﻈﺎم ﻹﻧﺘﺎج اﻟﺘﺴﺎﺑﻖ اﻟﻠﺤﻈﺔ هﺬﻩ ﻓﻲ ﻇﻬﺮتMicrosoft وﺷﺮآﺔSun وﺷﺮآﺔApple Macintosh اﻟﻜﺒﺮى اﻟﺸﺮآﺎت ﺑﺎﻗﻲ و. - ﺒـﻞ ﻣـﻦ وﺗﻄـﻮر ﺗﻘـﺪم هﻨـﺎك آـﺎن وﺑﻴﻨﻤـﺎ اﻷﺛﻨـﺎء هﺬﻩ ﻓﻲ وأﻳﻀﺎ ﺷـﺮآﺎتSun وﺷـﺮآﺔApple Macintosh ﺷــﺮآﺔ آﺎﻧــﺖMicrosoft اﻟـــ ﻧﻈــﺎم ﺗﻌﺘﻤــﺪ آﺎﻧــﺖ ﻷﻧﻬــﺎ ﻧــﺴﺒﻲ رآــﻮد ﺗﻌــﻴﺶCommand Prompt اﻷﺛﻨﺎء ﺗﻠﻚ ﻓﻲ. - ﺗﻄﺒﻴـﻖ ﺑﻄـﺮح ﻓﻘﺎﻣـﺖ اﻟـﺴﻮق ﻋـﻦ وﺑﺘﻨﺤﻴﻬﺎ ﺑﻌﺠﺰهﺎ ﻣﺎﻳﻜﺮوﺳﻮﻓﺖ ﺷﺮآﺔ ﺷﻌﺮتApplication ﺑﻨﻈ ﻋﺮف واﻟﺬي اﻟﺮﺳﻮﻣﻴﺔ اﻟﻮاﺟﻬﺔ ﻳﻌﺘﻤﺪ ﺗﺸﻐﻴﻞ ﻧﻈﺎم وﻟﻴﺲ ﺎمWindows 3.X . - ﻟﺘﻮﺣﻴﺪ اﻟﺤﺎﺟﺔ ﻇﻬﺮت ﻃﺮﻳﻘﺔ وﻟـﻪ وﺳـﻠﺲ دﻳﻨـﺎﻣﻴﻜﻲ اﻟﻜـﻮد ﻳﻜﻮن ﻟﻜﻲ اﻟﻤﺒﺮﻣﺠﻴﻦ ﻟﺪى اﻟﺒﺮﻣﺠﺔ وﺷﺮوط ﻗﻮاﻋﺪ، اﻟــ ﻣﻔﻬـﻮم ﻓﻈﻬـﺮ اﻟﻤﻘـﺼﻮد اﻟﻬـﺪف ﻋـﻦ ﺑﻌﻴـﺪة ﺑﺄﻓﻜـﺎر ﻣﺼﻤﻢ آﻞ ﻳﺨﺮج وﻟﻜﻲObject Oriented Programming ﺑـﺎﻟﺮﻣﺰ واﻟﻤﻌـﺮوف( OOP ) ﻣـﻦ اﻟﻌﺪﻳـﺪ ﻇﻬـﻮر إﻟـﻰ وأدت اﻟﻠ ﻐﺎت ﻋﻠﻴﻬﺎ اﻷﻣﺜﻠﺔ وﻣﻦC++ , Small Talk , … اﻟﺒﺮﻣﺠﺔ ﻟﻠﻐﺎت اﻟﺮاﺑﻊ ﺑﺎﻟﺠﻴﻞ ﻋﺮﻓﺖ ﺑﻤﺎ. Jordan , Amman Tel : ( 00 962 79 6527425 ) [email protected] MS O - وﺳﻤﻮﻩ ﻧﻈﺎم ﺷﺒﻪ ﻣﺎﻳﻜﺮوﺳﻮﻓﺖ ﺷﺮآﺔ أﻧﺘﺠﺖ ﺑﺎﻷهﺪاف اﻟﻤﻮﺟﻬﺔ اﻟﺒﺮﻣﺠﺔ ﺑﻮاﺳﻄﺔWindows 95 اﻟـ ﻧﻈﺎم ﻋﻠﻰ ﻳﻌﺘﻤﺪ آﺎن أﻧﻪ ﻧﻈﺎم ﺷﺒﻪ آﺎن أﻧﻪ وﺳﺒﺐDOS وﻋﻤﻠﻪ أداءﻩ ﻓﻲ.

Upload: hocine-cheniki

Post on 18-Apr-2015

43 views

Category:

Documents


17 download

TRANSCRIPT

Page 1: Learen C SHARP Fully

الدرس األول الكامل في السي شارب

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

:األولىالمحاضرة : بداية صناعة الحاسوب منذNET .تاريخ الـ

خرج أناس عرفوا بإسم المهندسين والمصممين والعلمـاء اللـذين قـاموا بتـصميم في بداية األمر -

طوابق تقريبا من النوع الكبير 5وهيكلة جهاز الحاسوب وقد نتج عن ذلك جهاز ضخم إحتوى على كرة إنشاء جهاز حاسب آلي قد نتجت إثر ضخامة المعلومات وإزالة طريقة الكتابة على وآانت ف .

.الورق وإزالة الوقت الكبير للعمليات الحسابية األربعة ألن جهـاز الحاسـوب لـم 0,1آانت العمليات األساسية للحاسوب تبرمج عن طريق اللغة الثنائية -

.يكن يفهم سوى هذه اللغة .Assemblyلغة التجميع المعروفة بـاألسمبلي ثم ظهرت -- IBM في هذا المجال بحيث آانت تصمم جهاز حاسب آلي و تـضع فيـه التي آانت من الشرآات

والتي أدت فيما بعد إلـى تطـور مـصطلح نظـام Operating System ( O.S )نظام تشغيل صغير . والحاجة إلى تطويره O.Sالتشغيل

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

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

الذي صمم بواسطة هذين الطالبين تبنت نظامهما بالكامل إلى النظام IBMعندما نظرت شرآة - .وعملت على تشجيعهما

Disk Operating System جاءت من الجملـة المختـصرة DOS وآلمة DOSآان النظام يدعى - .ومعناها قرص نظام التشغيل

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

و نتيجة لـذلك آـان . ر لتنفيذ ذلك سط 20 أو 15يتوجب على المبرمج مثال لطباعة آلمة أن يكتب ديدة طريقة جديدة لتوفير الوقت والتقليل من حجم البرنامج فقاموا بإبتكار طريقة جد البد من إيجا

ومن ، واحد فقط مكان ب Instruction حيث قاموا بوضع أآثر من Procedureوهي طريقة الدوال Structuredهنا نشأ مفهوم المكتبات التي تضم أآثر من دالة وتطورت البرمجة فعرفـت بإسـم

Programming نتيجة لذلك طورت عدة لغـات مثـل . ومعناها البرمجة الترآيبيةCOBOL ولغـة Cشهيرة و الFORTRON والتي عرفت بالجيل الثالث للغات البرمجة.

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

وبـذلك النظـام تـم Command Promptت والمـسماة السوداء التي آانت معروفة في ذلك الوق حيــث آــان التفاعــل مــع User-Friendly ومعناهــا الواجهــة والتــي آانــت Interfaceمعرفــة الـــ

.المستخدم تفاعال مباشرا من خالل الرسومات نـسبة إلـى صـانعه س المـسمى يـونيك Open Source آانت تمتلك النظام المفتوح SUNشرآة -

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

Microsoft وشرآة Sun وشرآة Apple Macintosh و باقي الشرآات الكبرى . Apple وشـرآة Sunشـرآات وأيضا في هذه األثنـاء وبينمـا آـان هنـاك تقـدم وتطـور مـن قبـل -

Macintosh ــت شــرآة ـــ Microsoft آان ــام ال ــد نظ ــت تعتم ــا آان ــسبي ألنه ــود ن ــيش رآ تعCommand Prompt في تلك األثناء .

Applicationشعرت شرآة مايكروسوفت بعجزها وبتنحيها عـن الـسوق فقامـت بطـرح تطبيـق - .Windows 3.Xام وليس نظام تشغيل يعتمد الواجهة الرسومية والذي عرف بنظ

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

Object Oriented Programming والمعــروف بــالرمز ( OOP ) وأدت إلــى ظهــور العديــد مــن . بما عرفت بالجيل الرابع للغات البرمجة … , C++ , Small Talkومن األمثلة عليها غات الل

Jordan , Amman Tel : ( 00 962 79 6527425 ) [email protected] MS

O

Windows بواسطة البرمجة الموجهة باألهداف أنتجت شرآة مايكروسوفت شبه نظام وسموه - . في أداءه وعمله DOS وسبب أنه آان شبه نظام أنه آان يعتمد على نظام الـ 95

Page 2: Learen C SHARP Fully

الدرس األول الكامل في السي شارب

جيل من البرمجيات المتكاملة من خالل شـرآة مايكروسـوفت والتـي وظهرت الحاجة إلى إخراج - .Microsoft Officeسميت فيما بعد بـ

ولكنـه Windows 97وبعد سـنتين تقريبـا طرحـت شـرآة مايكروسـوفت نظـام تـشغيل وسـمته - .فشل فشال سريعا فقد طرح وخالل شهرين فقط تم سحبه من األسواق لرداءته

مت أول نظــام تــشغيل مــستقل بواجهــة رســومية والــذي عــرف بإســم ولكنهــا ســرعان مــا قــد -Windows 98 هنا ظهرت الحاجة إلنشاء برمجيات متكاملة على طريقة الـ ، و Enterprise التـي

.تعني وجود جميع الحلول في مجموعة واحدة غيليإستخدام نظامها التش قامت شرآة مايكروسوفت بالتفكير بفكرة إلجبار جميع العمالء على -

قامت بالتسهيل علـى ، و BASIC ولغة الـ Cفقد قامت بطرح معالج لبعض اللغات مثل لغة الـ ، المستخدمة من قبل النظام والمختـصرة مـن جملـة API على ال وبالمجان الحصول المبرمجين

Application Program Interface قامـت بالتـسهيل ف. والتي تعني واجهـة البـرامج التطبيقيـة وقت طويـل جـدا ىفمثال إذا أراد المبرمج آتابة آود إلظهار نافذة فقط فإنه سيبق ، المبرمج على

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

وبالطبع فإن البرنامج النـاتج مـن هـذه العمليـة لـن يـشتغل سـوى . طريقةإليها بواسطة هذه ال .Windowsعلى نظام التشغيل

ألنه آان سلس وسـهل اإلسـتعمال APIقام المبرمجين بكتابة البرامج المختلفة بواسطة نظام -والتـي وصـلت سـنويا إلـى ونتيجة لذلك فقد زادت مبيعات شرآة مايكروسوفت أضعافا مضاعفة

. مليار دوالر سنويا 3.5 JAVA بطرح لغة جديدة من إنتاجها والتي عرفت بإسم جافـا SUNفي هذه األثناء قامت شرآة -

.لمالحقة شرآة مايكروسوفت وبذلك تكون هذه الشرآة قد قطعت شوطا آبيرا بهذا المجال :ظهرت مكتبتان هنا من إنتاج الشرآتان وهما -

SDK : من شرآة مايكروسوفت وهي إختصار لجملةSoftware Developer Kit . JDK : من شرآةSUN وهي إختصار لجملة JAVA Developer Kit .

والتـي أصـبحت حاليـا Databaseلكن يوجد جانب لم تعيهما تلك الشرآتان وهو قواعـد البيانـات - الرائـدة فـي هـذا Oracleفقـد آانـت شـرآة ي الجانب المهم واألآبر في إستخدام الحاسب اآلل

التــي أيــضا آانــت مــن Fox Proوظهــرت شــرآات أخــرى مثــل شــرآة . المجـال والــسباقة إليــه .الشرآات الكبيرة في هذا المجال

Fox Pro ملكيـة شـرآة راءشقامت بتنبهت شرآة مايكروسوفت باآرا إلى خطورة هذا الجانب ف - SQL التي عرفت بإسم Databaseا بإنشاء المكتبة الخاصة للـ أمالآها وقامت الحق إلىوضمتها

. Visual C++ , Visualو بإستخدام قواعد البيانات أنتجت شرآة مايكروسوفت لغات جديدة مثل -

Basic , Visual Fox Pro وضمتها إلى قائمتها البرمجية . لغــة خاصــة لمعالجــة و بإســتخدام تكنولوجيــا اإلنترنــت فقــد قامــت شــرآة مايكروســوفت بطــرح -

وهـي عبـارة عـن صـفحات إنترنـت InterDevصفحات اإلنترنت والي سـميت فيمـا بعـد باإلسـم .ASPنشطة ذات اإلمتداد المعروف

أول بأول من حيث قواعد البيانـات ( JAVA ) تعمل على تحديث وتطوير لغتها SUNآانت شرآة - .و التعامل مع اإلنترنت

.HTMLتي تعني جزء من آود لغات اإلنترنت في صفحة والScriptجاءت فكرة الـ -بسبب الطمع والجشع الذي آان عند شرآة مايكروسوفت فقد قامت بالخطوة القاتلة وهي أنها -

ولكنها لم تسلم بتلك الفعلة فقـد قامـت شـرآة ، ++Visual Jأنشأت لغة جديدة وسمتها بإسم SUN هـا صـاحبة اللغـة فقـد خـسرت شـرآة برفع دعوة قضائية على شـرآة مايكروسـوفت وألن

مليار دوالر أمريكي ومنعت من 3مايكروسوفت تلك القضية وتم تغريمها مبالغ طائلة وصلت إلى .إستعمالها والتطوير عليها لذلك السبب

:يمكن تلخيص اإلصدارات للغات البرمجة في تلك الفترة لشرآة مايكروسوفت بالجدول التالي -

Jordan , Amman Tel : ( 00 962 79 6527425 ) [email protected] MS

O

Visual Studio 6 Visual Studio 5 Visual Studio 4 Visual Studio 2 Visual C++ Visual C++ Visual C++ C Visual Basic Visual Basic Visual Basic Basic

Visual Fox Pro Visual Fox Pro Visual Fox Pro

Page 3: Learen C SHARP Fully

الدرس األول الكامل في السي شارب

Jordan , Amman Tel :

InterDev InterDev Visual J++

++ فمـثال وجـود أوامـر فـي لغـة الـسي ظهرت مشاآل عديدة في لغات شـرآة مايكروسـوفت -

وعدم وجودها في الفيجوال بيسك وآذلك فقد آان من الصعب تـشغيل برنـامج علـى الفيجـوال تـسير علـى الطريـق SUNفـي هـذه األثنـاء آانـت شـرآة ، ++ بينما هـو مكتـوب بلغـة الـسي

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

إسـتعمال غيـر مكتبـة واحـدة فقـط مـن المكتبـات يسعهواحد يستطيع التعامل مع لغة واحدة ال لمبـرمج الخ ، وآل مكتبة متخصصة بلغة واحـدة ال يـستطيع ا ... DAO , ADO , ODBCالتالية

إستعمالها في لغة أخرى وفي هذا تقسيم المبرمجين إلى أقسام عديدة وآل مبرمج لـه مجـال تمـشي بـدون أي مـشاآل فهنـاك SUNيختلف عن مجال زميله في المهنة ، بينما آانت شـرآة

.JDBCلغة واحدة فقط وهي الجافا وهناك مكتبة واحدة وموحدة فقط لقواعد البيانات وهي 2000ايكروسوفت بنظرة عميقة للموضوع وأسفر عن ذلك خطة جديـدة مـع عـام نظرت شرآة م -

وأدت Frame Wareوهي إخراج لغات موحدة لها نفس مكتبات التشغيل ولها إطـار واحـد فقـط #VC فقـدمت لغـات جديـدة مثـل NET .إلى ظهور لغات جديـدة عرفـت بمجموعـة الـدوت نيـت

: وضمت Visual Studio 7 . NETوضمتها في مجموعة 1 – Visual C # ( 2000 ) 2 – Visual C ++ ( 2002 ) 3 – Visual Basic (2002) 4 – Visual J# ( 2003 )

ولعلك تتساءل آيف ذلك ؟؟ والمحاآمة ؟؟#Jفي هذه النسخة قاموا بضم لغة الـ .الجافاهنا قامت شرآة مايكروسوفت بتصميم تلك اللغة من الصفر وقاموا بتطويرها لتحاآي لغة

بإستطاعة المبرمج تصميم وXML , ADOآل اللغات السابقة آانت قادرة وبكفاءة التعامل مع الـ

:وصناعة البرامج في المجاالت التالية Windows Application , Web Application , Mobile Application , Smart Device …

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

:التالي

Microsoft Intermediate Language ( MSIL )

. NET Class Library

Machine Code

Web App

Mobile APP

Windows App

Mobile APP

ADO

XML

System I / O

EXE

( 00 962 79 6527

DLL

425 ) Oms

OCX

[email protected] MS

O

Page 4: Learen C SHARP Fully

الدرس الثاني الكامل في السي شارب

بسم اهللا الرحمن الرحيم : المحاضرة الثانية

: Object Oriented ( OOP )) الكائنية ( مفهوم وفلسفة البرمجة هدفية الغرض آما قلنا وتحدثنا سابقا في المحاضرة األولى من أنه ال بد مـن وجـود معيـار ومقيـاس لبرمجـة وآتابـة -

وبسبب هـذه الفلـسفة ظهـر . وسهولة مرونةة والكود من طرف المبرمجين ولنخرج جيل ذو خبرة عالي والتي تستند إلى إستخدام المكتبـات Object Oriented ( OOP ) الموجهةما يعرف ببرمجة الكائنات

Library إسـتخدام الـدوال وFunction والتـي عرفناهـا قبـل ذلـك بالبرمجـة الترآيبيـة Structured Programmingعلى إثرها الموجهةاسطة الكائنات والتي ظهر مفهوم البرمجة بو .

أو ال ؟OOP بالكائنات وآيف نستطيع الحكم على لغة بأنها الموجهة واآلن ما معنى البرمجة - فعندما آان )) معن الجيتاوي (( سريعة حدثت مع معلمي األستاذ طرفة قبل أن أبدأ أريد أن أسرد لك -

فـي الـشرآات البرمجيـة 1دن والتي تعتبـر رقـم الموجودة هنا في األر WinWordيشتغل في شرآة . تم إدخال علـم الحاسـوب ونظـم المعلومـات الحاسـوبية فـي المـدارس والجامعـات والتي بواسطتها

الرائــدة فــي عــالم IBM فــي تلــك الــشرآة جــاءه شــخص مــن شــرآة Project Managerوبــصفته وهو في المقابلـة ++ العالية في السي وآونه ذو الخبرة ويختبر معلوماته وأراد أن يسأله . الحاسوب

:فقام بسؤاله السؤال التالي مع العلم أن الجميع بشكل آامل ولكنها تدعمها ، أم ال ؟ قال له ال تعتبر OOP Full تعتبر ++Cهل لغة

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

:ليست لغة برمجة موجهة بالكائنات التالي )) ++Cلغة الـ (( والسبب في ذلك

: يجب أن تتوافر فيها الشروط األربعة التالية Full OOPفلكي نتكلم عن لغة أنها 1 –Encapsulation 2 – Abstraction 3 – Inheritance 4 – Polymorphizen

:عة بالتفصيل الممل ولنأتي الى الشروط األرب Encapsulation : الشرط األول

ومن إسمها تستطيع تمييز ذلك فمعناها الكبسولة . ومعناه هو تجميع أشياء ووضعها آاملة بمكان ما :جزأينولتعريفها

ونضع فيه آل المتغيرات والـدوال التـي لهـا عالقـة ببعـضها )) Class(( هي تعريف مكان : الجزء األول ثم نسند إليه إسما ومن

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

Abstraction : الشرط الثاني

ال أقـوم بتحديـد التفـصيالت لهـا إال فـي قـسم ) Class( الــ داخـل Functionوهي إضافة دالـة عامـة .البرنامج الرئيسي

:فمثال في جامعة معينة فينتج من ذلـك آـائن للـدآتور وآـائن Modulesأو )) Class(( نريد صنع عدة آائنات

الرئيسي من خالل البرنامج ه وأردنا أن نجري بحث فيالخ... للطالب وآائن للمدير وآائن للعامل و دالة لهذا الغرض فكتبت في آل آائن دالة 100 متغير و100فأتت مجموعتان أول مجموعة قامت بتعريف

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

دالــة وتــؤدي نفــس الغــرض فهــي هنــا 30 متغيــر و 30وتــأتي المجموعــة الثانيــة فتــستخدم . صــنعته إستخدمت دالة خاصة بالبحث في آل آائن بدال من عدة دوال وهي هنا لم تحدد البحث بواسطة مـاذا

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

Jordan , Amman Tel : ( 00 962 79 6527425 ) [email protected] MS

O

Page 5: Learen C SHARP Fully

الدرس الثاني الكامل في السي شارب

:وآمثال ثان فتأتي شـرآة أ وتطلـب )) قياسية (( نفترض أن عندنا شرآة مشروبات غازية تقوم بإضافة علبة خامة

مئة عبوة هنا تستخدم الشرآة العبوة الخامة وتقوم بالتعديل وإضافة اإلعالنات الخاصة بشرآة أ علـى . عبوة فتصنع آما صنعت مع شرآة أ 300وتأتي شرآة ب وتطلب العلب المطلوبة ماذا لو قمنا باألصـل بتـصميم العلـب للـشرآة أ وقامـت : المثال قليال ونسأل أنفسنا ذاولنتوقف عند ه

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

.ا مخيلتن

Inheritance : الشرط الثالثومـاذا يعنـي )) طيـب (( لو سألنا أنفسنا ما معنى هذه الكلمة ألجبنا أنفسنا بالسرعة معناها التـوارث

!!ذلك ؟؟

:العديد من المبرمجين يفهموا هذا المفهوم فهما خاطئا آالتالي دة أو خاصيتان أو عدة خواص فإننـا إذا آان عندنا أربع أو خمس آائنات تحتوي جميعها على خاصية موح

نقوم بإنشاء آائن جديد نضع فيه الخواص المتشابهة في آل آائن ونقـول ألنفـسنا أن جميـع الكائنـات وهــذا بمفهومــه )) الجديــد (( أي متوارثــة مــن الكــائن األصــلي Inheritanceاألخــرى هــي عبــارة عــن

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

:الفهم الخ... الطالب و الدآتور والعامل والسكرتير و : لنفترض أننا نمتلك الكائنات التالية

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

(( أي متوارثة من الكـائن األصـلي Inheritanceفهنا يمكننا القول بأن الكائنات األخرى هي ، دور اإلبن !!!ولكن . وهذا آما قلت منطقيا مقبول )) اإلنسان

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

! .!وبعد أخذهما على حده فال يمكننا التمييز ما هو ؟؟. أنه آائن الطالب

!!؟؟ )) Object (( ـالكائن وبين ال)) Class(( ـ ما الفرق بين ال: سؤال يجب طرحه هنا :إليك الفرق !! سؤال محير أليس آذلك

. هو شيء نظري غير موجود على الواقع فهو عبارة عن تعريفات لشيء معين نظريا Classالـ . الواقع ليصبح عنصرا وآائنا عمليا وهو الكائن النظري عند تطبيقه على أرض Objectالـ

Polymorphizen : رابعالشرط ال

:وإليك تبيينا لكالهما . Override والـ Overloadيمكن تقسيمه إلى نوعين وهما الـ Overload : الوسـائط التـي (( وهي عبارة عن دوال لهم نفس اإلسم ولكن تختلف في عدد الباراميتر

أو نوعها )) تأخذها Operator Overload : حـرف إلـى أن نحولـه 2=1+1فـي المعادلـة التاليـة + فمثال نريد إشارة الزائـد

= 1 & 1فبإمكاننا تعريف نفس اإلسم ولكن أغير في النوع والكود لتصبح المعادلة التاليـة )) & (( وصل 11.

Override : لكن أغير في الكود فمثال وهي عبارة عن آتابة نفس الدالة األصلية طبق األصل عنها و فيقـوم الحاسـوب بحـذف X = 7 ثم نقوم بعـدها بتعريـف الجملـة التاليـة X = 3نعرف الجملة التالية

هذا بالنسبة للمتغيرات . األولى وتطبيق الثانية كـود أما بالنسبة للدوال فإذا عرفنا دالة في آائن معين ثم قمنا بإعادة آتابة الدالـة ولكـن غيرنـا فـي ال

.إعتماد الثانية فيقوم الحاسوب بحذف األولى و

أآثر من مرة بإضافة تغييرات في النوع أو الباراميتر أو Functionإذن يحق لي آمبرمج إستعمال الدالة .بإعادة تعريفه

Jordan , Amman Tel : ( 00 962 79 6527425 ) [email protected] MS

O

:إذن

Overload : تغيير النوع أو عدد الباراميتر لدالة معينة. Override : غيير على النوع أو الباراميتر تغيير الكود فقط وال ت.

Page 6: Learen C SHARP Fully

الدرس الثالث الكامل في السي شارب

بسم اهللا الرحمن الرحيم : المحاضرة الثالثة

: Console قسم الـ –بيئة الفيجوال ستوديو دوت نيت : قبل التحدث والدخول إلى هذه البيئة يجب أن تمتلك نسخه منها وعنوانها -

Microsoft Visual Studio .NET 2003 سيديات على األغلب وتتكون من6 وهي تتكون من : 2003لدوت نيت سي دي ل2 MSDN سي دي للمكتبة 3 وهو عبارة عن مكونات ما قبل البدايةComponent سي دي 1 للتعامل مع قواعد البيانات)) إضافي (( وهو غالبا ال يكون موجود معها SQL 2000 Server سي ي 1

:لنبدأ اآلن مثـل اإلصـدارة الـسادسة أو Microsoft Visual Studioإذا نظرنا إلى اإلصدارات القديمة من مكتبة الـ

وقارنـاهم Visual Basic و برنـامج الــ ++Visual Cالخامسة وأخذنا علـى سـبيل المقارنـة برنـامج الــ :آالتالي

:من الناحية النظرية

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

% 95 بوربوينت مثال سنجد هناك تشابها بنسبة إلى بالعمل على وورد ثم اإلنتقال 2003األوفيس .إذا فشل اإلصدار السادس من الناحية النظرية

:أما من الناحية العملية

:إليك التالي لضغط على قم با- Start Program File Microsoft Visual Studio 6.0 Microsoft Visual C++ 6.0

:سيظهر لك الشكل التالي

Jordan , Amman Tel : ( 00 962 79 6527425 ) [email protected] MS

O ثم قم بإختيار Closeقم بالضغط على

Page 7: Learen C SHARP Fully

الدرس الثالث الكامل في السي شارب

File New Project MFC AppWizard ( exe ) :آالصورة التالية

. ثم إضغط على موافق 5 و 4وقم بإختيار اإلسم لها آما في الرقم قم بفتح الشجرة من قسم نافذة المشروع OK منها ثم Finishوسيظهر لك شاشة أخرى قم بإختيار

:آالتالي

Jordan , Amman Tel : ( 00 962 79 6527425 ) [email protected] MS

O

Page 8: Learen C SHARP Fully

الدرس الثالث الكامل في السي شارب

حسنا خزن هذا الرقم في مخيلتك 6 الموجودة هنا ستجدها Classes إلى عدد الـ أنظر

:اآلن إنتقل إلى فيجوال بيسك حسب التسلسل التالي

Start Program File Microsoft Visual Studio 6.0 Microsoft Visual Basic 6.0

:سيظهر لك الشكل التالي

ماذا تالحظ ؟؟3ولكن هنا إنظر إلى الرقم ++ الحظ أننا إخترنا المشروع التنفيذي آما في السي دار الـسادس آـذلك فـي إذا فـشل اإلصـ )) 6موجـود ++ طيـب فـي الـسي (( وجود ملف واحـد فقـط

نفس عدد الملفات في اإلختبار من الناحية العملية ألنه يجب على آل لغة في اإلصدار أن تحتوي على آل مشروع مشابه

ونالحظ )) 2003(( اآلن وبعدما الحظنا المقارنة في اإلصدار السادس ننتقل إلى مجموعة الدوت نيت

:الفرق :قم بتتبع التسلسل التالي

Start Program File Microsoft Visual Studio .NET 2003 Microsoft Visual Studio .NET 2003

ماذا تالحظ من المسار ؟؟

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

:بعد أن تتبعت المسار ستظهر لك النافذة الرئيسية آالتالي

Jordan , Amman Tel : ( 00 962 79 6527425 ) [email protected] MS

O

Page 9: Learen C SHARP Fully

الدرس الثالث الكامل في السي شارب

:الحظ معي وبالترتيب لكي تتعرف على واجهة البرنامج .وهو شريط العنوان والكل يعرفه – 1 به أوامر للمساعدة في بناء المشروع في بيئة الدوت نيت شريط القوائم و– 2 ))2(( من شريط القوائم )) آثيرة اإلستعمال (( مر مختصرة به أوا شريط اإلختصارات و– 3 :صفحة البداية وهي الصفحة الرئيسية لهذه البيئة وتتكون من – 4 :وتتكون من التالي )) Projects )) 6 المشاريع -

يخ حيث قمت بالعمل بهم مع التار )) 7رقم (( نافذة المشاريع وتحتوي على آخر أربع مشاريع - )) .التعديل عليه (( يكتب التاريخ إما اليوم أو األمس أو تاريخ العمل به

.على التوالي )) 13 )) (( 12(( أزرار إنشاء أو فتح مشاريع سابقة - : Online Resourceنترنت المصادر من اإل-

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

:My Profile ملفك الشخصي -

: هنا يمكنك التعديل على الواجهة بشكل عام أو إختصارات لوحة المفاتيح آالتالي

Jordan , Amman Tel : ( 00 962 79 6527425 ) [email protected] MS

O

: لو فتحت هذه النافذة لوجدت الشاشة آالتالي

Page 10: Learen C SHARP Fully

الدرس الثالث الكامل في السي شارب

6++ يمكنك إختيار أي إختصارات للغة قد تعودت عليها من قبل آالسي )) 3 (( يمكنك تغيير الشكل العام أو اإلطار العام لبيئة الدوت نيت )) 4 (( د تعودت عليها من قبليمكنك أن تختار طريقة عرض المساعدة للغة ق )) 5 ((

))2(( آل األرقام السابقة يمكن أن تعطيك ملف خاص آما في * .اإلختيار السادس هو إجراء حدث عند بداية تنفيذ بيئة الدوت نيت و

شريط لعرض النوافذ الموجودة أمامك فـإذا إختفـت واحـدة مـا عليـك سـوى الـضغط علـى إسـمها - 5

.وستظهر لك حاال . النوافذ بتطبيقات لن نستعمله فهو خاص Console شريط األدوات ولكن في السي شارب – 9

.نافذة ملفاتك في مشروعك الذي تعمل عليه اآلن – 10 .المساعدة نافذة – 11في آل نافذة ستجد إشارة الدبوس هذه ومعناها أخفي تلقائيا بمعنى أنه إذا ذهبت الماوس مـن – 14

.وإذا إقتربت منها قم بإظهارها تلقائيا . ذة قم بإخفائها تلقائية فوق تلك الناف

) :1( مالحظة من الـصورة الـسابقة يمكنـك زيـادة عـدد المـشاريع عـن أربعـة وذلـك بالمـسار )) 6(( في القسم رقم

:التالي Tools Option Environment General Display recently

:آالصورة التالية

Jordan , Amman Tel : ( 00 962 79 6527425 ) [email protected] MS

O

Page 11: Learen C SHARP Fully

الدرس الثالث الكامل في السي شارب

ثم قم بالنقر على موافق(( * )) فقم بزيادة العدد عند إشارة النجمة

) :2( مالحظة :إذهب إلى )) صفحة البداية (( إذا بدأت البيئة ثم لم تظهر لك نافذة البداية

Help Show Start Page

:Console Applicationاآلن وبعد ما تعرفت على أقسام النافذة الرئيسية لنبدأ بمثالنا األول بالـ

. File New Projectإذهب اآلن إلى .Ctrl + Shift + Nأو قم بالضغط على

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

:لنقف قليال عند هذه النافذة لكي نبين أجزائها ستالحظ أسماء جميع اللغات المستعملة في بيئة الدوت نيت ))1 (( في هذا القسم أنظر هنا – 1

. وبهذا تكون شرآة مايكروسوفت قد نجحت في تجميع جميع اللغات في إطار واحد مثل تطبيقات الويندوز وتطبيقات الكونسولالتي يمكنك تصميمها )) القوالب (( تجد جميع األقسام – 2

)) .2(( وذلك في القسم )) Pocket PC ((ات السمارت ديفايس وتطبيق . ))3(( بواسطة األزرار في القسم ))2(( يمكنك أن تصغر وتكبر األيقونات الموجودة في القسم – 3 )) .4(( إذن اآلن لنقم بفتح مشروع سي شارب فقم بالضغط على – 4 سبق لنا تعريفها وهي Consoleن تطبيقات الـ والحظ أ )) 5(( ثم بعدها قم بالضغط على – 5

.DOSـ التطبيقات التي تفتح شاشة سوداء آنظام ال ملفات (( وتذآر أنه سيسمي الملفات آلها بهذا اإلسم )) 6(( يمكنك تسمية المشروع من الرقم – 6

)) .العمل وبإمكانك تحديد مكان معين بالضغط . Directoryتعرف أنها مكان منطقة العمل )) 7 (( من إسمها – 7

)) .8(( على الزر الذي يحمل الرقم .سيفتح لك نافذة مساعدة عن هذه الصفحة فقط ))9(( إذا ضغط هذا المفتاح – 8 بإمكانك زيادة الخيارات المستخدمة عندك بإضافة عملك في مجلد جديد على المسار الذي حددته – 9

.Moreوالذي يحمل آلمة )) 10(( وذلك بالضغط على الرقم )) 7 (( لخطوة رقم في ا

Jordan , Amman Tel : ( 00 962 79 6527425 ) [email protected] MS

O .لنبدأ مشروعنا اليوم )) موافق (( OK وأخيرا قم بعمل - 10

Page 12: Learen C SHARP Fully

الدرس الثالث الكامل في السي شارب

:إذا نجحت في تطبيق السابق ستظهر معك النافذة التالية

:أنظر إلى النافذة السابقة والحظ معي . Class1.csوسماها )) 1(( قام بفتح نافذة جديدة – 1

:يتكون اإلسم من قسمين آالتالي وهذه تعتبر الكائن الرئيسي في المشروع ألنه سبق لنا أن قلنـا أننـا Class1القسم األول يحمل إسم

أنه يجب أن يكون هناك على األقل آائن واحد وهو وألننا قلنا OOPنسعى للغة تدعم البرمجة الكائنية وبهـذه الخطـوة إرتقـت مايكروسـوفت إلـى مـستوى البرمجـة Main Functionسية يحمل الدالة الرئيـ

.بالكائنات والتي لم تكن موجودة باإلصدارات السابقة

أي إسم اللغة C Sharp ومعناه csوالقسم الثاني يحمل إسم اإلمتداد ماذا تالحظ ؟ )) 2(( في القسم – 2

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

:مالحظة سريعة هنا ؟ )) ماذا تالحظ (( إفتح مشاريع غير السي شارب حاول و

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

Jordan , Amman Tel : ( 00 962 79 6527425 ) [email protected] MS

O

Page 13: Learen C SHARP Fully

الدرس الثالث الكامل في السي شارب

:نأتي اآلن إلى منطقة العمل ونشرحها بالتفصيل ل - :الحظ معي النافذة آالتالي

))إقرأ المالحظة بعد الموضوع مباشرة ((

: نستطيع إستنتاج التالي ;using Systemجملة )1( في السطر رقم جميــع الكلمــات الموجــودة فــي منطقــة العمــل والتــي تحمــل اللــون األزرق هــي آلمــات محجــوزة *

Keywordنستطيع إستعمالها آمتغيرات ال. , Age, AGE, aGE ( يعنـي أن المتغيـرات Case Sensitiveتعتبر لغة الـسي شـارب لغـة حـساسة *

AgE ( وتعاملها هذه اللغة آل واحدة على حده متغيرات ال يشبه بعضها بعضاآلها . . وهي تعبر عن نهاية السطر ;تحتوي على فاصلة منقوطة نهاية آل جملة *

للتعامــل مــع )) namespaceسـنتفق علــى تــسميتها (( ووظيفـة الــسطر األول هــي إســتدعاء مكتبــة في لغة السي include#ج وتعادل هذه الجملة بكلمة بشكل جيد مثل جمل اإلدخال واإلخرامشروعال

والحظ أن أول حرف آبير وهذه المكتبة مختصة بالدوال الرئيسية التي Systemهنا إستدعى مكتبة الـ المـستخدمة فـي iostream.h تستخدم بكثرة آجمل اإلدخال واإلخراج وتعادل هذه المكتبة مكتبـة الــ

.لغة السي

نـستطيع إسـتنتاج namespace First_Application_With_Console جملة )3( في السطر رقم :التالي

. الذي نكتبه اآلن مشروعقام بإنشاء مكتبة تحتوي على ال* . بدال من الفراغات والتي أصال إسم مشروعنا الحالي ) _ (قام بوضع عالمة تحت السطر* ووظيفته إخفاء تفاصيل الكـالس أو الدالـة ) -( ناقص تالحظ أنه يوجد مربع صغير يحتوي على إشارة *

إذا حرآـت المـاوس ( ... ) المشار إليها وبعد الضغط عليه يظهر لنا مـستطيل يحتـوي علـى ثـالث نقـاط بمـستطيل أصـفر اللـون Tagعليه يعطيك محتوى الكالس أو الدالة المشار إليها آامال آشكل مالحظة

.من الطول فيعرض لك محتوياتها مهما بلغت .والهدف من هذا المربع هو إخفاء دالة أو آالس سبق لنا أن آتبناها وال نريد إظهارها

Jordan , Amman Tel : ( 00 962 79 6527425 ) [email protected] MS

O

Page 14: Learen C SHARP Fully

الدرس الثالث الكامل في السي شارب

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

.المشروع الحالي ثم إتباعه بنقطة ثم إسم الكالس أو الدالة التي نريد إستعمالها

والذي يـدل علـى بدايـة الدالـة أو الكـالس وطبعـا نغلقهـا ) }( القوس المشهور )4( في السطر رقم . ) 21( آما في السطر رقم ) {(بالمثل بإستخدام القوس المثيل

دعها جانبا لن تفيدنا األن XMLجملة تعيق ولكنها للغة الـ <summary> /// )5 ( في السطر رقم

. الحظ أنها تحتوي على ثالث أقواس .في الوقت الحالي فلها وقتها

علـى العمـود وهـذا يعنـي بدايـة الجملـة األولـى فـي ) -( الحظ وجـود إشـارة )7( في السطر رقم .Functionالكالس أو الدالة

. تالحظ وجود إسم الكالس المستعملة في مشروعنا الحالي )8( في السطر رقم

تـسمى خاصـية )) مـربعين (( أي آلمة موجودة بـين قوسـين [STAThread] )13( في السطر رقم

Attribute وسنقوم بشرحها الحقا .

جد الدالة الرئيسية لمشروعنا هنا توstatic void Main(string[] args) )14( في السطر رقم .

:والجملة تتكون من *static void الدالة الرئيسية فهـي مـن نـوع تحديد نوعVoid التـي تعنـي أن الدالـة ال ترجـع أي

. من النوع اإلستاتيكي Staticقيمة وهي من القسم فـي دالـة معينـة تيكي بالنوع اإلسـتا لو أنك عرفت متغير ما : والنوع اإلستاتيكي يمكن شرحه آالتالي

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

من نوع Xعرفت في دالة معينة المتغير فمثال لو . البرنامج أو المشروح الذي صممته في وقت التنفيذ Int من النوع اإلستاتيكي وقمت فـي سـطر تـالي بزيـادة هـذا المتغيـر بقيمـة واحـد فإنـه آلمـا قمـت

.بإستدعاء الدالة سينفذ السطر الثاني فقط ويقفز عن السطر األول ألنه موجود في الذاآرة .دعه اآلن له وقت سنشرحه بالتفصيل

*Mainل حرف آبير الحظ أن أو. *(string[] args) الباراميترات (( وهي هنا تعني أننا بإمكاننا أن نستخدم الوسائط ((

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

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

C:\> Sum.exe 152 965 . فنستطيع مباشرة وبأول جملة في المشروع أن تعطيه الناتج

الحظ الفـرق فـي الـسطر (( الحظ وجود قوسين هنا وهما لجمل التعليقات // )16( سطر رقم في ال

أي أنها جمل ال معنى لها تضع التوضيح أو التعليق على الجمل في هذا السطر )) .الخامس

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

))MSDN تمتلك يجب أن (( لظهور نافذة المساعدة بالجملة التي تريد فقط F1قم بالضغط على

: مالحظة

Jordan , Amman Tel : ( 00 962 79 6527425 ) [email protected] MS

O :إذا لم تحتوي منطقة العمل على أرقام فبإمكانك إضافتها بإتباع المسار التالي

Page 15: Learen C SHARP Fully

الدرس الثالث الكامل في السي شارب

Tools Option Text Editor C# General Line Numbers :رة التالية آما في الصو

)) 1(( على الرقم قم بوضع

والتي تعني أنه بعد حد معين للسطر قم بإنزالـه )) Word Wrap )) 2آذلك بإمكانك أن تفعل خاصية . األفقي Scroll Barإلى السطر الجديد وبذلك أنت بغنى عن شريط الـ

)) .3(( لى الرقم أيضا تستطيع إظهار معلومات أخرى عن هذه النافذة بالضغط ع .OK )) 3(( إضغط الزر رقم اآلن إختر آما في النافذة السابقة و

.Consoleنكون هنا قد شرحنا آود البداية لملف السي شارب بطريقة الـ

:Systemبواسطة المكتبة " Hello World"اآلن سنقوم بكتابة أول برنامج شهير وهو طباعة جملة

: السطر التالي في الدالة الرئيسية اآلن قم بكتابة

))تحته خط (( والحظ أنه يوجد حروف آبيرة آما في الشكل :اآلن للناقش السطر السابق

والتي تسمح لنا بإظهار سطر على الشاشة وهي تأخذ قيمة من نوع WriteLineإستخدمنا الدالة * Stringام وبإمكانك أن تطبع المتغيرات واألسماء واألرق.

.Full OO لتطبيق مبدأ الـ Consoleالحظ أن الدالة السابقة خرجت من آالس إسمه *

Jordan , Amman Tel : ( 00 962 79 6527425 ) [email protected] MS

O

Page 16: Learen C SHARP Fully

الدرس الثالث الكامل في السي شارب

:آالتالي إليك األمثلة . WriteLineيوجد أآثر من صيغة للدالة 1 - Console.WriteLine("555"); 2 - Console.WriteLine(555); 3 - Console.WriteLine("Hello To RTAQ"); 4 - Console.WriteLine("Hello To {0}","RTAQ"); 5 - Console.WriteLine("Sum {0} + {1} = {2}",5,4,5+4);

:في المثال األول

. وسيعتبرها آأنها نص 555سيكون الناتج :في المثال الثاني

. وسيعتبرها آأنها رقم 555سيكون الناتج :في المثال الثالث

.ا آأنها نص وسيعتبرهHello To RTAQسيكون الناتج :في المثال الرابع

وسيعتبرها آأنها نص ولكـن إنتبـه هنـا فيوجـد تكنيـك جديـد وهـو أننـا Hello To RTAQسيكون الناتج (( تعتبرها البيئة بالترتيب بداية من صفر فهنا قمنا بإضافة متغير Indexبإمكاننا فصل الكالم إلى مواقع

{0} بــالرمز قمنــا باســتدعائه ف Index = 0ي يمتلــك الــذHello Toإلــى الجملــة األصــلية )) نــص .والموجود بعد الجملة األولى مباشرة بعد الفاصلة

:في المثال الخامس . بالترتيب ووضعها في الجملة األولى Index هنا أيضا قام بأخذ المواقع 9 = 4 + 5سيكون الناتج

:واآلن إلى آيفية تنفيذ البرنامج

أو قم بالضغط على األزرار Debug Start Without Debuggingد قم بالذهاب إلى فبعد آتابة الكو Ctrl + F5: التالية

؟؟Start والـ Debugلماذا هذه مع أنه يوجد أوامر آثيرة مثل الـ : تتساءللعلك

:أنظر إلى الصورة التالية . سأقوم بتوضيح األمر لك

.ن ظهور النافذة السوداء وتطبيق الكود مباشرة عمسئولوهو : 1الرقم ففي ولكن هنا يقوم بوضع سطر إضافي وهو سطر إيقافي لمشاهدة الكود )) 1(( آوظيفة : 2الرقم

.تظهر الشاشة السوداء ولكن سرعان ما تنتهي )) 1(( الكود السابق وبطريقة الرقم .EXE الملف التنفيذي يقوم بإنشاء الملفات الالزمة للمشروع بما فيها : 3الرقم

Jordan , Amman Tel : ( 00 962 79 6527425 ) [email protected] MS

O

.يقوم بحذف الملفات السابقة وإنشاء ملفات جديدة حسب التغيرات التي حدثت : 4الرقم

Page 17: Learen C SHARP Fully

الدرس الرابع الكامل في السي شارب

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

: المحاضرة الرابعة : Console قسم الـ –أنواع البيانات وجملة اإلدخال واإلخراج

.Indexesآما تعلمنا سابقا في جملة الطباعة أنه يمكننا الطباعة حسب المواقع

ة أنـواع سنقوم اليوم بالتوسع في صـيغة جملـة اإلخـراج والتعـرف علـى جملـة اإلدخـال وآـذلك معرفـ

:لنبدأ اآلن . البيانات التي تتيحها لنا لغة السي شارب

:تينالتاليتين يمكن تعريف نوع من المتغيرات بالطريقData Type Var Name ; Data Type Var Name = Value ;

:سنقوم اآلن بتعريف األنواع آالتالي الم البرمجة مما أحدث تغييرا عميقا في هذا المجال جديدا في ع( Variables )ظهر مفهوم المتغيرات

ويخـضع . ويمكن تعريف المتغير بأنه إسم يحمل قيمة قابلـة للتغييـر فـي وقـت الحـق فـي المـشروع :أما بالنسبة للشروط فهي . لشروط تسمية ويحمل نوع معين

. أن تبدأ بحرف– 1 .في البداية أو النهاية_ يجوز إستخدام الرمز – 2 . يجوز إستخدام األرقام في جميع الخانات ما عدا أول خانة– 3 . أن ال تكون من الكلمات المحجوزة للبرنامج– 4 آلها متغيرات ال يشبه بعضها بعضا ) Age, AGE, aGE , AgE(لغة حساسة أي شارب لغة السي – 5.

ولماذا؟ . صحيحةأي الجمل التالية برمجيا : سؤال - ) HW_C#_1 وضع عنوانها على اإليميل الخاص بي مع ذآر اإلسمواب الجيها وأرسل جاوب عل(

int idnumber; int transaction_number; int __my_phone_number__; float 4myfriend; float its4me; double VeRyStRaNgE; float while; float myCash; int CaseNo; int CASENO; int caseno;

: بالنسبة لألنواع فهي آالتالي أما :بتعريف المتغيرات التالية شارب تسمح لغة السي -

Boolean , character, float , integer , double , decimal , string , object , long , short , byte

ودة في هي أنواع جديدة في لغة السي شارب حيث لم تكن موج) تحته خط ( األنواع باللون األحمر وأود إعالمك أخي العزيز إلى ضرورة آتابة األنواع آلها بحروف صغيرة وأنت تعرف ، ++ لغة السي

.لماذا :األنواع جميعها حسنا سأقوم اآلن بشرح

أو true القيمتين إحدى ويحتوي bool بالكلمة المحجوزة Boolean يعرف المتغير البولياني – 1

false على ذلك مثاالليك أخي الكريم وإخاطئ صحيح أو :

bool myStatus = true; bool yourStatus = false;

. وضع قيمة إفتراضية في جملة التعريف أو في جملة الحقة مكنوآما رأينا في المثال السابق ي

OMS

Jordan , Amman Tel : ( 00 962 79 6527425 ) [email protected]

. آما في اإلصدارات السابقة 1 أو 0 هنا بأنه ال يمكن إستخدام األرقام التنبيهويجب

Page 18: Learen C SHARP Fully

الدرس الرابع الكامل في السي شارب

النـوع هـو مـن أآثـر األنـواع هـذا و int بالكلمـة المحجـوزة Integer المتغير العددي الصحيح يعرف– 2 : النوعهذاإستعماال إليك أمثلة إنتشارا و

int count; int number_of_students = 30;

قيمـة مثـل يأخذ قيمة عدد صحيح أي أننا إذا أسندنا إليـه integer هنا أن المتغير الذي يحمل نوع ننبهو

.5 فإنه سوف يعتبرها 5.9 أو5.3 وهـو يـشبه النـوع الـسابق ولكـن float بالكلمـة المحجـوزة Float يعرف المتغير العددي العـشري – 3

وهـو النـوع Doubleومـن هنـا يمكننـا إشـتقاق النـوع . 3.33333333يسمح بالفاصلة العـشرية مثـال ومثال علـى النـوع . مشابه له Decimalأيضا النوع ة قبل وبعد الفاصل32العشري ولكن يسمح بطول

float : float owned = 0.0f; float owed = 1234567.89f;

فـإذا أردت أن Double إلى أمر وهو أن لغة السي شـارب تعتبـر النـوع األصـل هـو الــ التنويههنا يجب

قيمـة وأنهـي الجملـة بإعطائهثم قم تعرف متغير من هذا النوع ما عليك سوى آتابة جملة التعريف له ...ولكن . بفاصلة منقوطة

يجـب أن تزيـد حـرف بعـد التعريـف فـإذا أردت أن تعـرف Decimal والـ Floatمع األنواع األخرى مثل الـ : عليك بكتابته آالتالي Floatمتغير من النوع

float x = 32.23f Float وإنما من النوع Doubleوع يدل على أن هذا الرقم ليس من النfحيث أن الحرف

: عليك بكتابة التالي Decimalأيضا إذا أردت أن تعرف متغير من النوع decimal x = 31.43m

وهنـا Decimal وإنمـا مـن النـوع Double يدل على أن هـذا الـرقم لـيس مـن النـوع mحيث أن الحرف .Floatالحرف ميم للتمييز بينه وبين حرف الـفاء للنوع

ومن ) لفظها آار وليس شار ( char بالكلمة المحجوزة Character) خانات ( يعرف المتغير الخاني – 4

ستطيع تعريـف أي خانـة أو أي رمـز مـن رمـوز لوحـة الـذي يحمـل خانـة واحـدة فقـط تـ خالل هذا النوع : وإليك بعض األمثلة على هذا النوع ASCIIالمفاتيح أو الرموز األمريكية المشفرة

char firstInitial = 'J'; char secondInitial = 'K';

وهو عبارة عن نوع آامل يحتوي علـى جمـل Stringومن هنا أيضا يمكن أن نعرف النوع الجديد وهو الـ .ونصوص آتابية

O

بالفاصلةString والنوع Char إلى أمر وهو أن لغة السي شارب تميز بين النوع التنويههنا يجب وآمـا قلـت لـك النـوع ( " ) بفاصلة مزدوجـة Stringوالنوع ) '( فاصلة واحدة Charالنوع حيث تعطي

.األول يأخذ خانة واحدة فقط وهو عبارة عن نوع يحمـل جميـع أي قيمـة مـن القـيم الـسابقة أي أنـه Object النوع األخير وهو الـ - 5

:ها هو مثال ذلك . لخا... يمكن أن يحتوي عدد صحيح أو خاني أو من نوع بولياني

object x=313.22222m; object x=313.22222f; object x = 'a' object x = "Hello"

MS

Jordan , Amman Tel : ( 00 962 79 6527425 ) [email protected]

Page 19: Learen C SHARP Fully

الدرس الرابع الكامل في السي شارب

أريد أن أذآر أننا عندما نعرف متغير من نوع ما فإن أول قيمة له هي مكانه في الذاآرة فمثال لـو ونهاية :الي متغير من نوع صحيح وعملنا له إخراج آالتفأننا قمنا بتعري

static void Main(string[] args) { int x; Console.WriteLine(x); }

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

static void Main(string[] args) { int x = 124; Console.WriteLine(x); }

: آالتالي Systemآذلك يمكنك تعريف المتغيرات باألنواع بإستخدام مكتبة الـ

System.Int16 x=121; 16 character System.Int32 x=121; 32 character System.Int64 x=121; 64 character

:ي نوع من األنواع السابقة مثل أو أSystem.String x="RTAQ";

:جمل اإلدخال واإلخراجاآلن لنتعرف أآثر على

: فمثال Indexesتعلمنا طباعة المتغيرات بطريقة الـ

int x=432; Console.WriteLine("The Value Of X Is : {0}",x);

: في هذه الجملة أنه ال يجوز طباعة متغيران فقط مثل سأذآرConsole.WriteLine(x,y);

: بنص وتصحيح الجملة السابقة آالتالي تبدأفهذه الجملة خاطئة ويجب أن

Console.WriteLine("The Value Of X & Y Is : {0} {1}",x,y); .xسيقوم بطباعة قيمة

اج التحكم في صيغة المخرج فمثال يمكننا إخراج المتغيـر علـى شـكل اآلن يمكننا وبواسطة جملة اإلخر

: آالتالي Exponentialعملة أو عدد صحيح أو بفاصلة عشرية أو حتى بالـ

Console.WriteLine("The Value Of X : {0:E}",x);

هنــا يعنــي E أي موقــع المتغيــر ثــم الــصيغة المطلوبــة وحــرف الـــ {E:0}الحــظ هنــا أننــا قمنــا بزيــادة Exponential وهو متغير رياضي معروف .

)) :يجب أن يكون الحرف آبير (( والمخرجات بجانبهحسنا إليك سردا بقائمة الصيغ وما تعني

.52.19f تساوي xعلى إفتراض أن قيمة

Console.WriteLine("The Value Of X : {0:C}",x); $ 52.190 Console.WriteLine("The Value Of X : {0:D}",x); Error Console.WriteLine("The Value Of X : {0:E}",x); 5.219000E+001 Console.WriteLine("The Value Of X : {0:F6}",x); 52.190000

OMS

Jordan , Amman Tel : ( 00 962 79 6527425 ) [email protected]

Console.WriteLine("The Value Of X : {0:G}",x); 52.19

Page 20: Learen C SHARP Fully

الدرس الرابع الكامل في السي شارب

:الشرح مـن مـأخوذ Cأثير العملـة أي عالمـة الـدوالر والحـرف إلضافة ت C إستخدمنا الحرف األولىفي الجملة

. Currencyإسم العملة باإلنجليزي وهي فإذا عرفنا Integer وهي ال تنفع إال مع النوع Decimal ومعناها D إستخدمنا الحرف الثانيةفي الجملة

:اتج ثم نفذنا الجملة التالية لكان الن25متغير من نوع عدد صحيح ثم أسندنا له القيمة Console.WriteLine("The Value Of X : {0:D6}",x); 000025

. بوضع أصفار إلى اليسار لتصبح بعدد الخانات التي أدخلتها x خانات للرقم 6أي أنه أخذ . Exponential إلضافة تأثير المتغير الرياضي E إستخدمنا الحرف الثالثةفي الجملة )) .الرقم بعد الحرف مباشرة (( للداللة على عدد الفاصلة Fرف إستخدمنا الحالرابعةفي الجملة . وال يقوم بالتغيير بشيء General مأخوذ من آلمة و وهG إستخدمنا الحرف الخامسةفي الجملة

: آالتالي OR أو ANDمثل أيضا يمكننا إستخدام المعامالت المنطقية

AND : آالتالي ) و( ومعناها & يمكننا إستخدامها بالرمز: int x,y; x = 4; y = 7; Console.WriteLine(x&y);

:هنا سيقوم بإستخدام النظام الثنائي آالتالي بأخـذ خانـة خانـة اآلن يقوم . بالنظام الثنائي 111 يكافئ 7 بالنظام الثنائي والرقم 100 يكافئ 4الرقم : عليها AND من اليمين إلى اليسار ويقوم بتطبيق المعامل إبتداء

1 & 1 1 1 & 0 0 0 & 1 0 0 & 0 0

ألنه يقوم بإعادتها إلى النظـام 4بالتالي يكون الناتج رقم ) 100( فيصبح الناتج في الرقمين السابقين

: إال أنه يستعمل التالي ORوآذلك بالنسبة للمعامل . العشري 1 | 1 1 1 | 0 1 0 | 1 1 0 | 0 0

. بالعشري 7 ويكافئ 111وهنا الناتج . \ + Shift بالضغط على OR على رمز الـ لحصولايمكنك

:هنا نكون أنهينا جملة اإلخراج لنبدأ بجملة اإلدخال أي أن هذه اللغة تقوم بتحويل نـاتج اإلدخـال Stringال تقرأ الكلمة المدخلة إال في لغة السي شارب -

:ر نقوم بالتغيير حسب جمل محددة وإليك تبيان ذلك إلى نص فقط وإذا أردنا نوع آخ

:جملة اإلدخال والصيغة العامة Var Name = Console.ReadLine();

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

:إليك األمثلة

string x; x = Console.ReadLine(); Console.WriteLine("You Entered : {0}",x);

. String آقيمة xسيقوم بإسناد قيمة المدخل إلى المتغير

OMS

Jordan , Amman Tel : ( 00 962 79 6527425 ) [email protected]

Page 21: Learen C SHARP Fully

الدرس الرابع الكامل في السي شارب

!! آيف أقوم بإدخال رقم ؟؟ اآلنتتساءلحسنا لعلك الموجـودة فـي المكتبـة Convertخدم النوع أو دالة الــ أقول لك يجب هنا أن تست سأقوم بالرد عليك و

System آالتالي :

:Parse بنقطة ثم آلمة أتبعهيمكنك أن تحول قيمة نص إلى رقم بإستعمال النوع ثم

Integer Var = Type.Parse(String Var) ; : ذلك الوإليك مث

static void Main(string[] args) { string x; int y; x = Console.ReadLine(); y = int.Parse(x) ; Console.WriteLine("Square Number : {0}",y*y); }

.Integer من نوع y إلى المتغير String من نوع xقمنا بتحويل المتغير في المثال السابق : آالتالي Convertأيضا يمكنك فعل السابق بالدالة

y = Convert.ToInt16(x) ;

.يحتوي على جميع األنواع)) آائن التحويل (( الكائن وهذا

:ويمكنك دمج الخطوتان السابقتان في واحدة آالتالي

static void Main(string[] args) { int x; x = Convert.ToInt16(Console.ReadLine()); Console.WriteLine("Square Number : {0}",x*x); }

برنامج بعشرة شخص فمن الممكن أن يكتب .رمج ولطريقة التفكير لديه ولكفاءته وهنا يرجع األمر للمب .جيدة و عملية سطور وآخر يكتبها بخمسة سطور و بطريقة

:اآلن سأقوم بإعطائك بعض األسئلة

) HW_C#_2وضع عنوانها مع ذآر اإلسم على اإليميل الخاص بي واب الججاوب عليها وأرسل ( .ج لجمع عددين بإدخال العددين من خالل المستخدم بإستخدام جملة اإلدخال أآتب برنام– 1 .2 تساوي Xبإعتبار قيمة X2+0.5X+1 أآتب برنامج إليجاد المعادلة التالية – 2 ولماذا؟ . خطأأي الجمل التالية برمجيا – 3

- int x; x = Console.ReadLine(); Console.WriteLine("Square Number : {0}",x*x); - Console.WriteLine(5,4); - Console.WriteLine("who are you {1} Or {2} ?","Ahmad","Husam"); - int x,y; x = 4; y = 7; x = 5; - Console.WriteLine("First Litter Of 1 & 2 Is : {0} , {1}",O,T); - int x; x = 4; Console.WriteLine("The Value Of X Is : {0}",X);

OMS

Jordan , Amman Tel : ( 00 962 79 6527425 ) [email protected]

Page 22: Learen C SHARP Fully

خامسالدرس ال الكامل في السي شارب

بسم اهللا الرحمن الرحيم : المحاضرة الخامسة

: Console قسم الـ –الجمل الشرطية وحلقات التكرار

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

: آالتالي Selection Statement حيث تقسم جمل اإلختيار اآلن لنبدأ في قسم جمل اإلختيار

If Statement . Switch Statement .

:Ifالجملة الشرطية يمكننا إستخدام الجملة الشرطية لوضع شروط وجواب لهذه الشروط

Task listفمثال نعلم أننا ال نستطيع القسمة على صفر وإن نفذنا ذلك فسيظهر لنا خطأ في نافـذة الــ :لذلك ال بد من وضع شرط لعدم إمكانية إستخدام الصفر في المقام آالتالي

if ( condition ) Statement ;

: من إسم المتغير والمعامل والقيمة آالمثال التالي Conditionويتكون الشطر

int y; y = int.Parse(Console.ReadLine()); if ( y == 0 ) Console.WriteLine("Error");

عندما نكون فـي مقارنـة يجـب وضـع رمـز المـساواة ( والمعامل رمز المساواة Yهنا آان إسم المتغير

آمـا Error فإنـه سـيظهر لنـا الجملـة Yفـإذا قمنـا بإدخـال صـفر آقيمـة للمتغيـر . 0والقيمـة ) مرتين وضعناها في جملة الشرط وهذه الحرآة تعتبر جوابا للشرط

.أردنا أن نضع البديل للشرط أي أنه إذا لم تنفذ الجملة ماذا يحدث حسنا لو أننا

. وهي مرادفة للجملة الشرطية elseنستطيع فعل ذلك بإستخدام جملة :فيصبح المثال السابق آالتالي

int x,y; x = int.Parse(Console.ReadLine()); y = int.Parse(Console.ReadLine()); if ( y == 0 ) Console.WriteLine("Error"); else Console.WriteLine("X / Y = {0}",x/y);

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

int x; x = int.Parse(Console.ReadLine()); if ( x == 1 ) Console.WriteLine("A"); else if ( x == 2 ) Console.WriteLine("B"); else if ( x == 3 ) Console.WriteLine("C"); else Console.WriteLine("Other");

Jordan , Amman Tel : ( 00 962 79 6527425 ) [email protected] OMS

.لذلك في المثال السابق ستنفذ جملة واحدة فقط

Page 23: Learen C SHARP Fully

خامسالدرس ال الكامل في السي شارب

:السي شارب سنناقش اآلن مثاال لنتعرف بعض الدوال التي تتيحها لنا لغة

static void Main(string[] args) { Console.Write("Enter Any Character : "); char c = char.Parse(Console.ReadLine()); if ( char.IsUpper(c)) Console.WriteLine("The Character Is Upper Case"); else if ( char.IsLower(c))

O

else if ( char.IsDigit(c)) Console.WriteLine("The Character Is Lower Case");

Console.WriteLine("The Character Is Number"); else Console.WriteLine("The Character Is Not Alphanumeric"); }

ويقـوم البرنـامج بتحديـد هـل هـو في هذا المثال يقوم المستخدم بإدخال أي خانة من لوحـة المفـاتيح .حرف صغير أو آبير أو رقم أو غير ذلك

إمـا : وهـي عبـارة عـن دوال تعيـد إحـدى القيمتـين Charالحظ أننا هنا إستخدمنا بعض الدوال للكائن

True أو False وذلك بتحديد بعض األمور المتعلقة بالخانات .

. واحدة فقط من الجمل الشرطية السابقة والحظ أيضا أن البرنامج ال يدخل إال لجملة

:Switch ختيارجملة اإل وسبب وجود هذه الجملة هو أنه في حالة إذا أردنـا أن نختـار أو أن IFهنا األمر مشابه لجملة الشرط

هـذا لـن يكـون مفيـد لنـا else if فقـط بـدون إسـتخدام جملـة الــ Ifنبني عدة شروط آما في جملة الـ رنامج على المرور على آل جمل الـشرط وسـيزيد الوقـت للتنفيـذ ومـن هـذا الـسبب فسوف يعمل الب

.خرجت هذه الجملة :Switchلنأتي إلى الصيغة العامة لجملة

switch ( var ) case value : statement; break ;

:وإليك عزيزي المثال على آيفية إستخدامها

static void Main(string[] args) { Console.Write("Please Enter Your Selection 1,2 Or 3 : "); int x = int.Parse(Console.ReadLine()); switch ( x ) { case 1 : Console.WriteLine("Your Choose 1 ."); break ; case 2 : Console.WriteLine("Your Choose 2 ."); break ; case 3 : Console.WriteLine("Your Choose 3 ."); break ; default : Console.WriteLine("Error:?: Please Choose 1 Or 2 Or 3 ."); break;

}

Jordan , Amman Tel : ( 00 962 79 6527425 ) [email protected] MS

}

Page 24: Learen C SHARP Fully

خامسالدرس ال الكامل في السي شارب

و عنـدما وصـل إلـى جملـة 3 و 2 و 1في هذا المثال طلبنا مـن المـستخدم تحديـد خيـار ضـمن األعـداد . قام بالذهاب فورا إلى الخيار المطلوب Switchاإلختيار

. ولنبدأ في جمل تالية Selection Statementنكون هنا قد إنتهينا من جمل اإلختيار : آالتالي Iteration Statementتكرار اآلن سنناقش الجمل الحدية وحلقات ال

Do _ While Loop Statement While Loop Statement For Loop Statement

:Do التكرار جملة

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

do { Statement ; }while ( Condition ) ;

فالحظ معي هنا أن البرنامج يقوم أوال بتنفيذ الجمل الموجودة داخـل الحلقـة ثـم يقـوم بإختبـار الـشرط . يعني سينفذ الجمل الموجودة داخل الحلقة مرة واحدة فقط على األقل

:على هذه الجملة وإليك مثال static void Main(string[] args) { int x = 5; do { Console.WriteLine("The Value Of X Is : {0}",x); x = x + 1 ; }while ( x < 10 ) ; }

ثم يتأآد من تنفيذ الـشرط أو عدمـه وطبعـا x ثم يزيد قيمة 5في هذا المثال سيقوم أوال بطباعة الرقم فيقوم 9 حتى يصل إلى قيمة x لذلك سوف يستمر في طباعة قيمة المتغير 10 أصغر من قيمة 5ة قيم

x بعـدها سـيقوم بالتأآـد مـن قيمـة 10 ثم يزيد قيمـة المتغيـر ليـصبح 9 والتي تساوي xبطباعة قيمة .رية وطبعا هذا خطأ لذلك سوف يخرج من الجملة التكرا10 أقل من الرقم 10فنقارن هنا هل الرقم

:For التكرار جملة

.من أشهر جمل التكرار وهي هنا تقوم بالزيادة التلقائية مع تطبيق الشرط أوال :والصيغة العامة لهذه الجملة هي

for ( var = initial value ; Condition ; Increasing / decreasing) { Statement ; }

.تأآد من الشرط ثم يعمل على تنفيذ الجمل داخل الحلقة آما قلت لك سابقا فهنا يقوم البرنامج بال :و هاك المثال التالي

static void Main(string[] args) { for (int i = 1 ; i < 10 ; i++ ) { Console.WriteLine("Value Of i Is : {0}",i); } }

.9 إلى قيمة 1 من قيمة iسيقوم بتنفيذ الجمل وطباعة المتغير ؟ )) ++i(( علك تتساءل ما هو تعبير ل

: ويمكنك فهمها بالجملة التالية 1 بقيمة iوالجواب أن هذا التعبير آناية عن زيادة المتغير i = i + 1 ;

: وآذلك يمكنك فهما آالتالي --i: ويمكنك إستخدام تعبير اإلنقاص بالجملة التالية

Jordan , Amman Tel : ( 00 962 79 6527425 ) [email protected] OMS

i = i - 1 ;

Page 25: Learen C SHARP Fully

خامسالدرس ال الكامل في السي شارب

.فسيرا لهذا التعبير في الدروس القادمة و سنأخذ ت++iاآلن إستخدم تعبير

:While التكرار جملة : ولنتحدث اآلن عن الصيغة العامة لهذه الجملة Doتشبه إلى حد آبير في مبدأها عمل جملة التكرار

while ( Condition ) { Statement ; }

.هنا سيبقى يحقق الشرط وإذا خالف الشرط يقوم بالخروج من هذه الحلقة :وإليك مثال على هذه الجملة

static void Main(string[] args) { int x = 1 ; while ( x != 5 ) { Console.WriteLine("X = {0}",x); x++ ; } }

: هنا أنبهو بالنسبة للجمل التكرارية يمكن أن نعرف مفهوم الماال نهاية في أنـه إذا إسـتخدمت أحـد جمـل التكـرار

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

في األمثلة السابقة إذا قمت بتغيير مكان جملة الطباعـة بـدال مـن مكـان جملـة الزيـادة سـيقوم آذلك . للجملة بالتغيير الكلي

.وبهذا نكون قد غطينا جمل اإلختيار والتكرار

: اآلن سأقوم بإعطائك بعض األسئلة

) HW_C#_3على اإليميل الخاص بي مع ذآر اإلسم وضع عنوانها واب الججاوب عليها وأرسل ( 90,95,100,..…,5,10,15,20: آل خمس أرقام آالتالي 100 إلى 1 أآتب برنامج لطباعة األعداد من – 1

.While وذلك بإستخدام جملة التكرار :For ارسم الشكل التالي بواسطة جملة التكرار – 2

***** **** *** ** *

: بدون آتابة البرنامج وتنفيذه على الحاسوب ما مخرجات الكود التالي – 3static void Main(string[] args) { Console.WriteLine("X 1 2 3 4 5"); Console.WriteLine(" *---------------------------------------"); for (int i = 1 ; i <= 5 ; i++ ) { Console.Write("{0} | ",i); for (int j = 1 ; j <= 5 ; j++ ) { Console.Write("{0} ",i*j); } Console.WriteLine(""); } Console.WriteLine(" *---------------------------------------");

Jordan , Amman Tel : ( 00 962 79 6527425 ) [email protected] OMS

}

Page 26: Learen C SHARP Fully

سادسالدرس ال الكامل في السي شارب

بسم اهللا الرحمن الرحيم : المحاضرة السادسة

: Console قسم الـ –المصفوفات والحلقات المصاحبة لها ومعامالت الزيادة والنقصان

:Arrayالمصفوفات :تتيح لنا لغة السي شارب التعامل مع المصفوفات آالتالي

Type []name = new Type[Size];

رمـز المـصفوفة قبـل إسـم المـصفوفة ونتبعهمـا بعالمـة المـساواة وهنا نذآر نوع المصفوفة ثم نكتـب ثم نفس النوع الذي آتبناه أول الجملة ثم نذآر الحجم وإليك مثـال علـى newونكتب الكلمة المحجوزة

:ذلك int []x = new int[3];

ت تتقــدم مفهــوم المــصفوفة للتعامــل معهــا علــى شــكل مؤشــرا newو بإســتخدام الكلمــة المحجــوزة Pointer وذلك للخروج عن المألوف آونها Dynamic بدال من Static و بهذه الخطوة أصبحت لغة السي

.شارب تشبه الجافا في عملهاالجملة السابقة قمنا بحجز مكان لها بالذاآرة ولم نعطها قيم أولية ، لذلك يمكننا إعطائها قيم أولية في

:بطريقتين مختلفتين وهما :حجز المصفوفة يمكننا إعطائها قيم أولية آما في المثال التالي في أثناء – 1

int []x = new int[5]{4,3,7,22,8}; .فهنا قمنا بإسناد قيم للمصفوفة فورا وفي سطر واحد

: بعد التعريف للمصفوفة يمكنك إعطائها القيم آما في المثال التالي – 2

int []x = new int[3]; x[0] = 21 ; x[1] = 63 ; x[2] = 7 ;

:آذلك يمكنك إعطاء المصفوفة أآثر من بعد آالتالي int [,]x = new int[2,3];

.فهنا قمنا بوضع فاصلة للداللة على أنه يوجد لدينا هنا مصفوفة ذات بعدين

:آذلك يمكنك إعطاء القيم األولية لها بطريقتين :أولية آما في المثال التالي في أثناء حجز المصفوفة يمكننا إعطائها قيم - 1

int [,]x = new int[2,3]{{1,4,2},{52,12,9}};

: بعد التعريف للمصفوفة يمكنك إعطائها القيم آما في المثال التالي – 2

int [,]x = new int[2,3]; x[0,0] = 14;

Zero Baseدايـة وهنا يجب أن نوضح بعض التنبيهات ومن ضمنها أن لغة السي شارب تعتبر صفرية الب . آما يتبادر إلى األذهان 1 وليس 0يعني أول عنصر في المصفوفة يحمل الرقم

:يبمعنى أنه إذا أردت الحصول على أول عنصر يجب عليك فعل التال

int []x = new int[2]{1,3}; Console.WriteLine(x[0]);

النوع الصحيح وحسب آل نـوع ففـي النـوع في 0وأيضا القيم األولية للعناصر التي لم تعطها قيم هي . وهكذا Nullالخاني تكون القيمة األولية هي خانة الفراغ

OMS Jordan , Amman Tel : ( 00 962 79 6527425 ) [email protected]

Page 27: Learen C SHARP Fully

سادسالدرس ال الكامل في السي شارب

ويمكنك التعامل مع المصفوفة آما تريد فهنا سنقوم بكتابة برنامج يطلب من المـستخدم إعطـاء القـيم :األولية للمصفوفة ومن ثم طباعتها آالتالي

static void Main(string[] args) { int []x = new int[5]; for (int i=0 ; i<5 ;i++) { Console.Write("Enter Value At Location {0} In Array : ",i+1); x[i]=int.Parse(Console.ReadLine()); } Console.WriteLine(); for (int j=0 ; j<5 ;j++) Console.WriteLine("Value Of Location {0} Is : {1}",j+1,x[j]); }

O

.وآذلك يمكنك التعامل مع المصفوفة ذات األبعاد المختلفة

: آما في الجملة التالي Lengthوآذلك يمكنك معرفة حجم المصفوفة بالكلمة المحجوزة

Console.WriteLine(x.Length);

واآلن سأتحدث عن حلقة تكرارية جديدة صدرت في لغة السي شارب وهي خصوصية من خـصوصيات : وإليك الصيغة العامة لها foreachي جملة الـ المصفوفات وه

foreach ( Type var in Array )

ووظيفة هذه الجملة هي المرور على آل عنـصر مـن عناصـر المـصفوفة وأخـذ القيمـة الموجـودة فيـه : وإليك المثال التالي على آيفية آتابة الحلقةVarووضعها في المتغير

int []x = new int[5]; foreach ( int y in x )

:وهاك مثال على آيفية حساب مجموع عناصر المصفوفة

static void Main(string[] args) { int []x = new int[5]{12,41,8,3,6}; int sum = 0 ; foreach ( int y in x ) sum+=y; Console.WriteLine(sum); }

فإنـك غيـر 5 عنـدك مـصفوفة ذات أبعـاد آبيـرة مـثال ومن أهم الخصائص لهذه الحلقة هي أنه إذا آانت .وآذلك تريحك من آتابة حجم المصفوفة في آل حلقة . Forمضطر لكتابة خمس حلقات

:وسأتطرق للنوعين الموجودين في مثل هذه الحلقات

foreach ( Type var in Array ) فعندك هنا النوع للمتغير وهو باللون األحمر

وهو باللون األخضر والنوع للمصفوفة

وفي آل األنواع سيفهم النوع باللون األحمر النوع باللون األخضر حسب فهمه فـإذا آـان النـوع األحمـر عدد صحيح وآان اللون األخضر خانات فسيقوم بتحويل الخانـة حـسب رقمهـا باآلسـكي آـود ومـن ثـم

.يقوم بالعمليات عليها وهكذا لجميع األنواع

:والنقصان معامالت الزيادة

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

MS Jordan , Amman Tel : ( 00 962 79 6527425 ) [email protected]

Var = Var (operation) value ;

Page 28: Learen C SHARP Fully

سادسالدرس ال الكامل في السي شارب

/ .-+ * آتابة أي عملية مثل Operationفيمكنك بدال من آلمة :1ال على ذلك والذي يقوم بزيادة المتغير بقيمة وإليك مثا

i = i + 1 ; .واألغلب يستعمل هذه الطريقة

:وأيضا يمكنك إستعمال جملة بدال من آتابة المتغير مرتين آالتالي Var (operation)= value ;

:آما في المثال التالي i += 4 ;

.4فهنا نقوم بزيادة المتغير بقيمة : فقط بالتعبير 1دث عن متغيرات الزيادة بقيمة واحد فقط فهنا يمكنك زيادة متغير بقيمة سنتحاآلنو

Var++ ; :و أيضا يمكنك إستعمال التعبير

++Var ; :وأيضا يمكنك التعبير بالنقصان آما يلي

Var-- ; --Var ;

:حسنا سأقوم بالتعريف عن الصيغتان وقول وظيفة آل واحد منهما

:--i++ ، iتعبير أوال ال :هنا يقوم المترجم بزيادة المتغير بعد المرور على السطر و اإلنتقال إلى السطر التالي

:إليك مثاال على ذلك static void Main(string[] args) { int i=5 ; Console.WriteLine(i++); Console.WriteLine(i); }

. ثم باإلنتقال إلى السطر التالي سيقوم بزيادة المتغير 5هنا سيقوم بطباعة قيمة .وأنا أتحدث هنا عن معدل الزيادة وآذلك الحال بالنسبة للنقصان

:--i++ ، iأوال التعبير

:هنا يقوم المترجم بزيادة المتغير في نفس السطر و اإلنتقال إلى السطر التالي :إليك مثاال على ذلك

static void Main(string[] args) { int i=5 ; Console.WriteLine(++i); Console.WriteLine(i); }

فـي 6 ثم باإلنتقـال إلـى الـسطر التـالي وطباعـة 6هنا سيقوم بزيادة المتغير و سيقوم بطباعة قيمة .الجملة التالية

: في حلقات التكرار Continue وجملة Breakجملة

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

.معين وآذلك يمكننا تخطي حلقة معينة عند حدوث حدث نقوم بتحديده :Breakجملة

صـريحة داخـل أي حلقـة مـن حلقـات التكـرار وهـي غالبـا تكـون ضـمن جملـة breakوهنا تكتب آلمة :لي شرطية معينة آما في المثال التا

static void Main(string[] args) { for ( int i=0 ; i<10 ; i=i+2) { if ( i == 6 ) break ; Console.WriteLine(i); }

OMS Jordan , Amman Tel : ( 00 962 79 6527425 ) [email protected]

}

Page 29: Learen C SHARP Fully

سادسالدرس ال الكامل في السي شارب

ثـم 4 ثم 2 ثم 0 فستكون أول قيمة له هي 2في المثال السابق سيقوم البرنامج بزيادة المتغير بقيمة ؟ فتتحقق الجملـة وتقـوم 6ر عن قيمة المتغير هل قيمته سيقوم باإلستفسا6عندما يصل إلى القيمة

. والخروج من الحلقة نهائيا Breakبعمل

:Continueجملة

صريحة داخل أي حلقة من حلقات التكرار وهـي غالبـا تكـون ضـمن جملـة Continueوهنا تكتب آلمة : وإليك مثال ذلك Breakشرطية معينة آما في جملة

static void Main(string[] args) { for ( int j=0 ; j<=5 ; j++ ) { if ( j == 3 ) continue ; Console.WriteLine(j); } }

ثـم 2 ثم 1 ثم 0 فستكون أول قيمة له هي 1في المثال السابق سيقوم البرنامج بزيادة المتغير بقيمة ؟ فتتحقق الجملـة وتقـوم 3تغير هل قيمته سيقوم باإلستفسار عن قيمة الم3عندما يصل إلى القيمة

. فسيقوم بالتخطي والهروب من الحلقة وإآمالها في وقت الحق Continueبعمل

: اآلن سأقوم بإعطائك بعض األسئلة ) HW_C#_4على اإليميل الخاص بي مع ذآر اإلسم وضع عنوانها واب الججاوب عليها وأرسل ( 0 فمـثال الموقـع رقـم 500ا مربع الموقـع الخـاص بهـا وضـح حجمهـا قم بإنشاء مصفوفة وخزن فيه - 1

. وهكذا4 سيحمل القيمة 2 والموقع 1 سيحمل قيمة 1 والموقع رقم 0سيحمل قيمة في موقعه وهي فـي آـل عنـصر ( * ) بحيث تقوم بتعبئة إشـارة النجمـة 55 قم بملء عناصر مصفوفة تحمل الحجم – 2

، وقم بتعبئة 10ر على العناصر التي تحمل رقم عناصر من معامالت الرقم وال تم 6من مضاعفات الرقم ــالحرف ــة 0فمــثال الموقــع ) . O( البــاقي ب ) O( ال ينطبــق عليــه أي شــرط إذن نقــوم بتعبئتــه بالخان

نترآـه فـارغ 10والعنصر السادس تنطبق عليه إشارة النجمة فنقـوم بتعبئـة بإشـارة النجمـة والموقـع :ذا آتبته بشكل صحيح سيخرج معك الناتج آالتالي وإ. وهكذا

Value Of 40 Is : Value Of 20 Is : Value Of 0 Is : * Value Of 41 Is : O Value Of 21 Is : O Value Of 1 Is : O Value Of 42 Is * : Value Of 22 Is : O Value Of 2 Is : O Value Of 43 Is : O Value Of 23 Is : O Value Of 3 Is : O Value Of 44 Is : O Value Of 24 Is : * Value Of 4 Is : O Value Of 45 Is : O Value Of 25 Is : O Value Of 5 Is : O Value Of 46 Is : O Value Of 26 Is : O Value Of 6 Is : * Value Of 47 Is : O Value Of 27 Is : O Value Of 7 Is : O Value Of 48 Is * : Value Of 28 Is : O Value Of 8 Is : O Value Of 49 Is : O Value Of 29 Is : O Value Of 9 Is : O Value Of 50 Is : Value Of 30 Is : * Value Of 10 Is : Value Of 51 Is : O Value Of 31 Is : O Value Of 11 Is : O Value Of 52 Is : O Value Of 32 Is : O Value Of 12 Is : * Value Of 53 Is : O Value Of 33 Is : O Value Of 13 Is : O Value Of 54 Is * : Value Of 34 Is : O Value Of 14 Is : O Value Of 40 Is : Value Of 35 Is : O Value Of 15 Is : O Value Of 41 Is : O Value Of 36 Is : * Value Of 16 Is : O Value Of 42 Is * : Value Of 37 Is : O Value Of 17 Is : O Value Of 43 Is : O Value Of 38 Is : O Value Of 18 Is : * Value Of 44 Is : O Value Of 39 Is : O Value Of 19 Is : O

OMS Jordan , Amman Tel : ( 00 962 79 6527425 ) [email protected]

Page 30: Learen C SHARP Fully

سادسالدرس ال الكامل في السي شارب

)) :ال تستعمل الحاسوب (( قم بحساب المخرجات في البرنامج التالي بدون إستخدم الحاسوب– 3 static void Main(string[] args) { int x = 6 ; int y = 2 ; int z = 8 ; x += 2*y; y++; z = ++x+y--+ 5 ; x= ++x+ ++y ; Console.WriteLine("The Value Of x Is : {0}",x); Console.WriteLine("The Value Of y Is : {0}",y); Console.WriteLine("The Value Of z Is : {0}",z); }

: ما مخرجات البرنامج التالي وبدون إستخدام الحاسوب – 4

static void Main(string[] args) { for ( int i=0 ; i<5 ; i++) { for ( int j=0 ; j<3 ; j++) { Console.Write("O"); for ( int k=0 ; k<3 ; k++ ) { Console.Write("M"); if ( k+j%2 == 0 ) { Console.Write("S"); continue; } } } Console.WriteLine(""); } }

.20 في مصفوفة حجمها Index * 5يعني الـ ) 5الموقع ضرب ( اآتب برنامج لخزن القيمة – 5

OMS Jordan , Amman Tel : ( 00 962 79 6527425 ) [email protected]

Page 31: Learen C SHARP Fully

بعساالدرس ال الكامل في السي شارب

بسم اهللا الرحمن الرحيم : المحاضرة السابعة

: Console قسم الـ – وتقسيم البرنامج Goto وإستخدام جملة الـ Castingبرمجة األنواع وعملية الـ

:enumبرمجة األنواع وتصميمها بواسطة الكلمة المحجوزة

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

لذلك سهلت علينا لغة السي شارب وقامت . في األسبوع وقمت بالبحث عن نوع لفعل ذلك فلن تجده :الصيغة العامة لها والتي تقوم بعمل نوع جديد وإليك Enumبمنحنا آلمة

enum Type { Val1 , Val2 , ... , Val* } ;

:وهاك مثال على آيفية إستعمالها لصناعة نوع األسبوع

enum week { Sat , Sun , Mon , Tue , Wen , Thu , Fri } ; ل الكـالس داخـ وإنمـا يعني ليس داخل الدالـة الرئيـسية Class هنا أنه يجب عليك آتابتها قبل الـ أنبهو

. class وآلمة namespace في منطقة بين آلمة أوالحامل للدالة الرئيسية :وإليك مثال على ذلك

using System; namespace First_Application_With_Console { enum week { Sat , Sun , Mon , Tue , Wen , Thu , Fri } ; class Class1 { [STAThread] static void Main(string[] args) { week w1 = week.Tue ; Console.WriteLine(w1); } } }

.في المثال السابق قمنا بإنشاء نوع جديد وقمنا بإنشاء آائن منه وإعطائه قيمة من القيم المتاحة له لنوع ؟آتابة إسم اعلينا ولعلك تسأل لماذا ال نقوم بإعطائه القيمة مباشرة لماذا يجب

ال تعتبر هذا النوع من األنـواع الموجـودة أصـال فـي اللغـة يعنـي ليـست شارب والجواب أن لغة السي .آلمة محجوزة لذلك يجب علينا آتابة إسم النوع الجديد ثم إتباعه بقيمته الجديدة

:Castingتحويل األنواع بواسطة الـ

إلـى المتغيـر الـصحيح float وقمنا بإسناد قيمة الــ float واآلخر من نوع intإذا عرفنا متغيرين من نوع

. ويقول لك الخطأ أنه ال يمكنك إسناد القيمة Errorسيقوم البرنامج بإرسال رسالة :آما في المثال التالي

static void Main(string[] args) { int a = 3 ; float b = 6.12f ; a = b ; Console.WriteLine(a); }

OMS Jordan , Amman Tel : ( 00 962 79 6527425 ) [email protected]

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

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

Page 32: Learen C SHARP Fully

بعساالدرس ال الكامل في السي شارب

:Castingوإليك تصحيح للمثال السابق بإستخدام عملية الـ static void Main(string[] args) { int a = 3 ; float b = 6.12f ; a = (int)b ; Console.WriteLine(a); }

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

معـه Casting فهنا يمكننا أيـضا إسـتخدام الــ enumنعود اآلن لصياغة األنواع الجديدة بإستخدام آلمة

:فمثال إذا آتبنا المثال التالي . أيضا using System; namespace First_Application_With_Console {

O

class Class1 enum week { Sat , Sun , Mon , Tue , Wen , Thu , Fri } ;

{ [STAThread] static void Main(string[] args) { week w1 = week.Tue ; int a = 2 ; w1 = (week)a ; Console.WriteLine(w1); } } }

تطيع معرفة الناتج ؟هل تس ولو قلنا ألنفسنا آيف سـيفهم النـوع 2 الرقم w1في المثال السابق قام المترجم بإعطاء قيمة المتغير

week وما طريقته في ذلك ؟2 الرقم :حسنا سيفهمها المترجم آالتالي

والحظ معي . قيمة سيقوم بإعطاء القيم الموجودة في النوع الجديد بالترقيم إبتداءا من الصفر إلى آخر ؟2لو رقمناها ما هي القيمة التي تحمل رقم

. وسأقول لك صحيح Monأآيد ستعرف الجواب وتقول لي هي القيمة

حسنا ماذا لو قلت لي أنا حر في ترقيم القيم وأريدها قيما عشوائية فكيف أفعل ذلك ؟ :ئها القيم بالعدد الصحيح آالتالي إعطايمكنك تعريف النوع الجديد عندوفعل ذلك ببساطة يمكنك

enum week { Sat=15 , Sun=4 , Mon=162 , Tue=55 , Wen=0 , Thu=76 , Fri=11 } ; .وذلك بإضافة رمز المساواة وإعطائه قيمة آما تريد

:وإليك مثال ذلك using System; namespace First_Application_With_Console { enum week { Sat=15 , Sun=4 , Mon=162 , Tue=55 , Wen=0 , Thu=76 ,

Fri=11 } ; class Class1 { [STAThread] static void Main(string[] args) { week w1 = week.Tue ; int a = 55 ; w1 = (week)a ; Console.WriteLine(w1); } }

MS Jordan , Amman Tel : ( 00 962 79 6527425 ) [email protected]

}

Page 33: Learen C SHARP Fully

بعساالدرس ال الكامل في السي شارب

...هنا قمت بتلبية طلبك

:GoToفز غير التسلسلي جملة الق

ماذا لو أنك وصلت إلى جملة و اضطررت للرجوع إلى سطر معين آيف يمكنك فعل ذلك ؟ والموجودة في معظم اللغات وهي مـسئولة عـن القفـز gotoتتيح لك سي شارب وآكل اللغات جملة

: معها آالتالي Labelويجب إستعمال ليبل ، إلى سطر معين وأنـت حـر فـي ( : ) ويحتـوي علـى آلمـة تتبعهـا عالمـة النقطتـان الرأسـيتان نقوم بكتابة سطر آامـل

.إستخدام إسم الليبل ولكن ال تختار آلمة محجوزة :ثم في قسم ثاني وغالبا يكون جملة شرطية وتستدعيها آالتالي

goto Label ; :ولكي تستوعب هذه الجملة إليك المثال التالي

static void Main(string[] args) { int x=0; Label: Console.WriteLine(++x); if (x != 5 ) goto Label ; }

ماذا تالحظ هنا ؟ .. آفعل حلقة من حلقات التكرار gotoفعلت جملة

ولكـن لـم تـتمكن أي لغـة مـن OOلها إستخدامات آثيرة ومفيدة ولكن هذه الجملة تعتبر ضـد مبـدأ الــ .خ قديم حذفها ألن لها فوائد وتاري

Sequential بـدال مـن العمـل المتسلـسل Cursorومن أآثر الفوائد أنها تعمـل علـى تـشتيت المؤشـر .وتمنحنا حق التوجه إلى أي مكان في البرنامج من خالل الليبل المصاحب لها

في حالة حدوث خطأ معين فـي Recoveryونظم التشغيل تستفيد منها فمثال لعمل إسترجاع للجهاز . النظام نفس

:Functionsآفاءة البرنامج والتقسيمات من خالل الدوال

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

:اصة بك بالشكل التالي فهنا لغة السي شارب تتيح لك آتابة دوال في الكالس الخ

Type Function_Name ( Type Var , ... ) { Statement ; .... ; return Ret_value ; }

char و أيـضا intبداية نشرح نوع الدالة وهي أول آلمة هنا وهنا يمكنك إعطائها األنواع المعروفة مثل كل مباشـر علـى القيمـة المـسترجعة مـن وهـذا النـوع يـؤثر بـش . وأي نوع من األنواع الموجودة عندك

قيمة من النـوع Ret_valueالدالة بمعنى أنه إذا آان نوع الدالة عدد صحيح يجب أن نرجع في المتغير .العددي الصحيح

.وأما الجمل الموجودة داخل الدالة فهي الجمل التي تؤديها هذه الدالة والوظيفة التي آتبت لها وهنـا يمكنـك أن تبعـث Parameterفهي تسمى الوسـائط ( ) ل القوسين وأما المتغيرات والتي داخ

.قيم للتعامل معها من خالل الدالة

:وإليك اآلن مثاال عن آيفية آتابة دالة لجمع عددين int sum ( int x , int y ) { Console.WriteLine("Value Of Var X Is : {0}",x); Console.WriteLine("Value Of Var Y Is : {0}",y); return x+y ;

OMS Jordan , Amman Tel : ( 00 962 79 6527425 ) [email protected]

}

Page 34: Learen C SHARP Fully

بعساالدرس ال الكامل في السي شارب

Main Function بإرسال قيمتين من خـالل إسـتدعائها فـي الدالـة الرئيـسية قمنافي المثال السابق .والتعامل معها بواسطة طباعتهما وإرجاع قيمة حاصل جمعهما

.أما بالنسبة لإلستدعاء فهنا يكمن المغزى وأريدك أن ترآز معي قليال هنا

دعي دالة معينة يجب علينا ولكي نطبق مبدأ البرمجة الكائنية أن نـستدعيه مـن خـالل آـائن لكي نست :من نفس الكالس الموجود فيه الدالة الرئيسية لذلك نقوم بإنشاء الجملتين التاليتين

Class1 c1 = new Class1(); a = c1.sum(1,3);

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

والحظ معي هنا ، Full OOPوبهذه الخطوة تقدمت السي شارب لتصبح لغة داعمة للبرمجة الكائنية وإسناد قيمة الجمـع للمتغيـر الـذي يحمـل نفـس نـوع 3د والعد1أننا قمنا بإرسال قيمتين للدالة وهما

.aالدالة وهو المتغير :و إليك البرنامج آامال

using System; namespace First_Application_With_Console { class Class1 { [STAThread] static void Main(string[] args) { int a ; Class1 c1 = new Class1(); a = c1.sum(1,3); Console.WriteLine("Value Of Sum X & Y Is : {0}",a); } int sum ( int x , int y ) { Console.WriteLine("Value Of Var X Is : {0}",x); Console.WriteLine("Value Of Var Y Is : {0}",y); return x+y ; } } }

:فكما تالحظ راعينا بعض النقاط وهي . إنشاء دالة لجمع عددين وقمنا بإفتراض أن لديها وسيطين لعملية الجمع – 1 . إرجاع نفس نوع الدالة حيث أن جمع عددين صحيحين هو عدد صحيح وهو نفس نوع الدالة – 2 . قمنا بإنشاء آائن يحمل نوع الكالس الذي يحمل الدالة الرئيسية – 3 قمنا بإستدعاء الدالة بواسطة آائن من نوع الكالس األساسي وقمنا بإرسال الوسائط الالزمة – 4

. والمطلوبة من قبل الدالة . قمنا بإسناد قيمة الدالة المسترجعة بمتغير يحمل نفس نوع الدالة – 5

ومعناها أنهـا ال تعيـد Voidنوع فهي غالبا تكون من ، ولنتكلم اآلن قليال من التفصيل عن هيكلية الدالة . الموجودة في آخر الدالة Returnأي قيمة وهي هنا تريحنا من جملة

لذلك لم نحتـاج لجملـة Voidولو نظرت إلى الدالة الرئيسية و هيكلها لوجدتها عبارة عن دالة من النوع

Return . افـق النـوع الـذي حـددت فيمكنك تغيير نوعها إلى أي نوع ولكن يجب أن ترجع منها قيمة تو . .آذلك تالحظ هنا وجود وسائط هنا في الدالة الرئيسية وقد تحدثنا عنها في الدرس الثالث

OMS Jordan , Amman Tel : ( 00 962 79 6527425 ) [email protected]

وهي هنا تعني أنك يا برنامج يجب أن تحفظني عندك في الـذاآرة أننـي أنـا Staticوأيضا تالحظ آلمة ومن خالل آلمة سـتاتيك الدالـة علـى حجـز المكـان للدالـة ) Main( الدالة الرئيسية من خالل الكلمة

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

Page 35: Learen C SHARP Fully

بعساالدرس ال الكامل في السي شارب

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

.آان من النوع اإلستاتيكي فإنه سيحافظ على قيمته حتى اإلنتهاء من البرنامج .عن النوع اإلستاتيكي افية معلومات آوقد شرحت قبل ذلك

وفي الدالة السابقة في برنامج الجمع لم تكـن الدالـة معروفـة لـدى البرنـامج لـذلك قمنـا بإسـتدعائها

.بواسطة آائن من نفس نوع الكالس األساسي

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

using System; namespace First_Application_With_Console { class Class1 { [STAThread] static int Main(string[] args) { int a ; a = sum(1,3); Console.WriteLine("Value Of Sum X & Y Is : {0}",a); return 0 ; } static int sum ( int x , int y ) { Console.WriteLine("Value Of Var X Is : {0}",x); Console.WriteLine("Value Of Var Y Is : {0}",y); return x+y ; } } }

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

.فهنا آمل أن تكون قد فهمت معنى اإلستاتيك وآيفية التعامل معه من خالل الدوال

:حسنا لنأتي اآلن للمتغير اإلستاتيكي اإلسـتاتيكي بواسـطة الكلمـة المحجـوزة فكما قلت لك بإمكانك تعريف دالة أو حتـى متغيـر مـن النـوع

Static آما في المثال التالي : static Type Var = Value ; static Type Var ;

أيضا يمكنك آتابة المتغيرات في قسم الكالس أي بين الكالس الرئيسي وبين الدوال المختلفة ولو سألتك عن آيفية الوصول إليه فهل تستطيع اإلجابة ؟

ا أنه موجود في قسم الكالس الرئيسي يمكن التعامل معه في الدالة بشكل عادي أي ستقول لي بم :بكتابة إسم المتغير مباشرة آما في المثال التالي

class Class1 { int x = 10; [STAThread] static void Main(string[] args) { Console.WriteLine(x); } }

OMS Jordan , Amman Tel : ( 00 962 79 6527425 ) [email protected]

.مك غير صحيح وسأقول لك يا صاحبي أن آال

Page 36: Learen C SHARP Fully

بعساالدرس ال الكامل في السي شارب

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

:إسم الكالس األساسي ثم التعامل معه آالمثال التالي

class Class1 { int x = 10; [STAThread] static void Main(string[] args) { Class1 c1 = new Class1(); Console.WriteLine(c1.x); } }

. عبارة عن متغير غير إستاتيكي xالحظ أننا قمنا في المثال السابق بتعريف متغير جديد ألن المتغير سبة للمتغير آما هي في الدالة ؟قد تسأل هل األمر بالن.. ولكن

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

:البرنامج آالتالي class Class1 { static int x = 10; [STAThread] static void Main(string[] args) { Console.WriteLine(x); } }

:ويمكن أن ألخص لك النقاط األربعة للدالة آالتالي إذا آان عندك دالة من النوع العادي وتريـد إسـتدعاء دالـة ذات نـوع إسـتاتيكي يمكنـك إسـتدعائها – 1

:يلبرنامج آالمثال التالبشكلها الصريح ألنها معروفة لدى ا

void f1() { f2(); } static void f2() { Console.WriteLine("Hello"); }

إذا آان عندك دالة من النوع العادي وأردت أن تستدعيها من دالة أخرى تحمـل النـوع العـادي أيـضا – 2 :لييمكنك إستدعائها مباشرة بذآر إسمها بشكل صريح آما في المثال التا

void f1() { f2(); } void f2() { Console.WriteLine("Hello"); }

OMS Jordan , Amman Tel : ( 00 962 79 6527425 ) [email protected]

Page 37: Learen C SHARP Fully

بعساالدرس ال الكامل في السي شارب

إذا آانــت عنــدك دالــة مــن النــوع اإلســتاتيكي وأردت إســتدعاء دالــة تحمــل النــوع العــادي يمكنــك – 3 :يإستدعائها ألنها معروفة لدى البرنامج آالمثال التال

static void f1() { Class1 c1 = new Class1(); c1.f2(); } void f2() { Console.WriteLine("RTAQ"); }

إذا آانت عندك دالة من النوع اإلستاتيكي وأردت إستدعاء دالة أخرى من النـوع اإلسـتاتيكي أيـضا – 4 :يمكنك آتابة الدالة صريحة وبدون وسائط ألنها معروفة لدى البرنامج آالتالي

static void f1() { f2(); } static void f2() { Console.WriteLine("OMS"); }

:إذن اإلستدعاء بالشكل الصريح آالتالي Static Standard x Static Static Standard Static x Standard Standard

كل صريح داخل بعض ن يجوز مناداتهما بشاالنوعان إذا آانا متشابه

:أما بالنسبة إلستدعاء المتغير داخل الدالة

: إذا آان المتغير من النوع العادي والدالة من النوع العادي يمكنك إستدعاءه بشكل صريح آالتالي – 1

int x = 4 ; void Fun1() { Console.WriteLine(x); }

من النوع اإلستاتيكي يجب عليـك تعريـف متغيـر مـن نـوع إذا آان المتغير من النوع العادي والدالة – 2 :الكالس األب آما في المثال التالي

int x = 4 ; static void Fun1() { Class1 aa = new Class1(); Console.WriteLine(aa.x); }

صـريح إذا آان المتغير من النوع اإلستاتيكي والدالة مـن النـوع العـادي يمكنـك إسـتدعاءه بـشكل – 3 :آالتالي

static int x = 4 ; void Fun1() { Console.WriteLine(x);

OMS Jordan , Amman Tel : ( 00 962 79 6527425 ) [email protected]

}

Page 38: Learen C SHARP Fully

بعساالدرس ال الكامل في السي شارب

إذا آان المتغير من النوع اإلستاتيكي والدالة من النوع اإلستاتيكي يمكنك إستدعاءه بشكل صريح – 4 :آما في المثال التالي

static int x = 4 ; static void Fun1() { Console.WriteLine(x); }

) :الطرف األيمن( والدالة ) الطرف األيسر ( إذن لإلستدعاء بشكل صريح آالتالي بحيث يكون المتغير

Static Standard Static Static Standard Static x Standard Standard

.امات النوع اإلستاتيكي مع الدوال والمتغيرات أرجوا أن تكون قد وعيت إستخد

:Thisالكلمة المحجوزة

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

:فمثال بدال من آتابة جملتين آالتالي . األب إسم الكالس Class1 aa = new Class1(); Console.WriteLine(aa.x);

:thisسهلت عليك وقالت لك خذ وأآتب الجملة بسطر واحد فقط و بإستخدام الكلمة المحجوزة

Console.WriteLine(this.x);

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

النــوع اإلســتاتيكي أيــضا والــسبب فــي ذلــك أن البرنــامج نفــسه يعــرف المتغيــر أو الدالــة ذات النــوع . كلمةاإلستاتيكي فال داعي إلستخدام هذه ال

: اآلن سأقوم بإعطائك بعض األسئلة

) HW_C#_5على اإليميل الخاص بي مع ذآر اإلسم وضع عنوانها واب الججاوب عليها وأرسل ( أآتب برنامج للطلب من المستخدم بإدخال قيمتين ثم قم بحساب حاصل جمعهما وحاصل ضـربهما – 1

خدام دوال خارج الدالـة الرئيـسية وقـم بحفـظ بإست) راعي أصفار المقام ( ومقسوم األول على الثاني . عناصر وقم بطباعتهم من خالل الدالة الرئيسية 3ناتج آل عملية في مصفوفة مكونة من

:في آل برنامج من البرامج التالية مع الشرح خالل التتبع ) دون إستعمال الحاسوب ( حدد الناتج – 2

I - static void Main(string[] args) { int i = 3 ; OMS: if ( i++ > 6 ) goto Finish; for ( ; i++ < 9 ; ) { if ( i < 3 ) goto OMS; Console.WriteLine(i+1); } Finish: Console.WriteLine("Finish With I Is : {0}",i);

OMS Jordan , Amman Tel : ( 00 962 79 6527425 ) [email protected]

}

Page 39: Learen C SHARP Fully

بعساالدرس ال الكامل في السي شارب

II – class Class1 { enum RTAQ{Adil = 1 , OMS = 0 , Tarek = 3 , Islam = 2}; [STAThread] static void Main(string[] args) { RTAQ r1 ; for ( int i = 0 ; i < 4 ; i++) { r1 = (RTAQ)i; Console.WriteLine(r1); } } }

مـن نـوع Changeفـي دالـة إسـمها ومن ثم طباعتـه قم بكتابة برنامج لزيادة متغير من نوع عادي – 3void وهي من النوع اإلستاتيكي حيث المتغير موجودة في قسم ما في داخل الكالس الرئيسي .

: حدد الخطأ في آل جملة من الجمل التالية هل هو إمالئي أم منطقي وبدون إستخدام الحاسوب – 4

I – int i = 3 ; for ( ; j++ < 9 ; ) { Console.WriteLine(i+1); } II – static void Main(string[] args) { for ( int i = 0 ; i < 56 ; i++ ) { Console.WriteLine(i+1); goto Lab : } lab ; Console.WriteLine("Finish"); } III – enum RTAQ{Adil = 1 , OMS = 6 , Tarek = 3 , Islam = 2}; [STAThread] static void Main(string[] args) { int x = 4 ; RTAQ r1 = new RTAQ(); r1 = (RTAQ)x; Console.WriteLine(r1); } IIII – static void Main(string[] args) { int x = 4 ; char y = 6 ; Console.WriteLine("The Sum Is : {0}",x+y); }

OMS Jordan , Amman Tel : ( 00 962 79 6527425 ) [email protected]

Page 40: Learen C SHARP Fully

ثامنالدرس ال الكامل في السي شارب

بسم اهللا الرحمن الرحيم : المحاضرة الثامنة

: Console قسم الـ –مواضيع متقدمة حول الدوال

الموجودة ضمن الدالة الرئيسية ولنتحـدث اآلن عـن رتحدثنا في البدايات أنه بإمكانك إستخدام الباراميت :آيفية التعامل مع هذه الباراميتر مرفق في البرنامج وقمنا بإضـافة بـاراميتر آيـف يمكننـا التعامـل ال exeفلو قمنا بتنفيذ الملف التنفيذي

! . معه ؟ وآيف سنعلم أنه أدخل أو أنه لم يدخل وسائط ؟ :إليك اآلن مثاال ويليه الشرح بالتفصيل

using System; class Class1 { static void Main(string[] args) { int Sum = 0 ; if ( args.Length != 0 ) for ( int i=0 ; i<args.Length ; i++ ) Sum+=int.Parse(args[i]); Console.WriteLine(Sum); } }

ولكـن إذا قمـت بتنفيـذ البرنـامج فـسيطبع لـك . البرنامج السابق يقوم بحساب مجموع القيم المدخلـة وهنا يقوم بتنفيـذ البرنـامج مـن ) ئط الوسا( حسنا ال تنسى أننا في البداية قلنا ! آيف ذلك ؟ 0القيمة

واآلن آيف يمكننا إدخال وسائط ؟. غير وسائط ثم تجـد Binبعد تنفيذ البرنامج قم بالذهاب إلى المجلد األصلي للمشروع ثم ستجد هناك مجلد إسمه

سنقوم اآلن بإسناد الوسائط لـه ) \:C( قم بنسخه إلى موقع سهل مثل Debugفيه مجلد وحيد وهو إذا آنــت تمتلــك وينــدوز إآــس بــي أو ) cmd( وقــم بكتابــة Start Runاآلن إذهــب إلــى و )Command ( إذا آنت تمتلك غيره.

ثـم قـم بإسـتدعاء برنامجـك ولـيكن إسـمه ) \cd( األصـلية بواسـطة الجملـة Directoryإذهب إلى الـ Sum.exe آالتالي :

C:\>sum 1 3 4 8 C:\>

ألن المـدخالت Stringآما الحظت في المثال السابق آل القيم تـم تخزينهـا فـي مـصفوفة مـن النـوع .دائما عبارة عن نص

:الكالس

والسؤال هنا هل يمكننـا آتابـة أآثـر مـن آـالس . آما تالحظ في آل مشروع أنه يوجد آالس رئيسيي وهل يجوز آتابته داخل آالس آخر ؟

:ألب فغالبا يكون على الهيئة البسيطة آما في الكود التالي بالنسبة للكالس ا

using System; class Class1 { static void Main(string[] args) { } }

:حيث يوجد به دالة رئيسية ، والهدف من بتعريف آالس داخل آالس آالتالي

OMS Jordan , Amman Tel : ( 00 962 79 6527425 ) [email protected]

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

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

Page 41: Learen C SHARP Fully

ثامنالدرس ال الكامل في السي شارب

:إذن يجوز لنا إستخدام آالس آخر في نفس البرنامج آالتالي using System; class Class1 { static void Main(string[] args) { } } class Class2 { static void Main(string[] args) { } }

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

:وأن تهمل الثاني ألنه لن يبدأ به ، وحتى نقوم بتفضيل آالس على آخر إليك خطوات ذلك

O

أو مـن خـالل الـزر األيمـن 2م بإختيار الخصائص من خـالل الـرقم ثم ق 1إختر مشروعك من خالل الرقم ثـم إذهـب إلـى إقـالع الكـائن آمـا 3للماوس ومن ثم إختر خصائص ، ثم قم بإختيار عام آما في الرقم

ثـم قـم بالـضغط 5 ثم قم بإختيار أي آالس من الكالسات الموجودة عندك آمـا فـي الـرقم 4في الرقم .بدء من الكالس الذي حددته على موافق وهنا يقوم بال

MS Jordan , Amman Tel : ( 00 962 79 6527425 ) [email protected]

Page 42: Learen C SHARP Fully

ثامنالدرس ال الكامل في السي شارب

:آذلك يمكنك آتابة آالس داخل آالس آما في المثال التالي using System; class Class1 { static void Main(string[] args) { } class Class2 { static void Main(string[] args) { Console.WriteLine("Welcome"); } } }

نا يجب عليك تحديد أي آالس ستبدأ به فبإمكانك أن تبدأ بالكالس الداخلي ولن يكون للخارجي ولكن ه .وأيضا يمكنك تحديده آما في الخطوات السابقة . عالقة به

: أنواع حسب النوع وطريقة اإلرجاع آالتالي أربعةبالنسبة للدوال فهناك

:ع قيمة وال يرج) وسائط ( ال يأخذ قيمة األول النوع – 1 .Voidويمكن تسميته بالعقيم أي أنه ال يحتاج باراميتر وال يرجع أي قيمة وهو من النوع

:وإليك مثاال على هذا النوع using System; class Class1 { static void Main(string[] args) { Fun_Type_1(); } static void Fun_Type_1() { Console.WriteLine("Welcome In First Type Of Function ."); } }

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

ت للتخلص من تعريف آائن من نوع الكالس وإذا لم تفهم ما قل Staticآتبت قبل الدالة آلمة : مالحظة .راجع الدرس الذي قبله

: يأخذ قيمة أو أآثر وال يرجع قيمة الثاني النوع – 2

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

using System; class Class1 { static void Main(string[] args) { int x = 6 ; int y = 8 ; Fun_Type_2(x,y); } static void Fun_Type_2(int x,int y) { Console.WriteLine("The Sum Is : {0}",x+y); }

OMS Jordan , Amman Tel : ( 00 962 79 6527425 ) [email protected]

}

Page 43: Learen C SHARP Fully

ثامنالدرس ال الكامل في السي شارب

.ذها الحظ أننا في هذا النوع قمنا بإستدعاءه من الدالة الرئيسية وآتبنا الباراميتر التي يأخ : ال يأخذ قيم و يرجع قيمة الثالث النوع – 3

والحظ أننا ال نقوم بأخذ وسائط من الدالة الرئيـسية Voidوهو غالبا يكون من األنواع األخرى غير النوع أن أننا غالبا نضع معايير لهذه الدالة وحسب الطلب نقوم بإستخدامها ولكي تفهم ما أقول إليـك المثـال

:التالي using System; class Class1 { static void Main(string[] args) { int radius = 3 ; Console.WriteLine("The Area Of Cycle Of Radius {0} Is :

{1}",radius, 4*Fun_Type_3()*radius); } static float Fun_Type_3() { // PI return 3.14f ; } }

الموجـودة فـي دالـة ، حيـث أن Piلسابق قمنا بحساب مساحة آرة بواسـطة القيمـة هنا في المثال ا هذه القيمة هي قيمة ثابتة فال داعي إلرسال الوسائط والتغيير فيهـا ، آـذلك الحـظ أننـا قمنـا بطباعـة الدالة فورا ألنها تقوم بإرجاع قيمة ، آذلك يمكنك إسنادها ووضع قيمتهـا فـي متغيـر ثـم تقـوم بطباعـة

:ذا المتغير آالتالي هint radius = 3 ; float PI = Fun_Type_3() ; Console.WriteLine("The Area Of Cycle Of Radius {0} Is : {1}",radius,

4*PI*radius);

: يأخذ قيم و يرجع قيمة الرابع النوع – 4مالت حسب الطلب ولكي وفي هذا النوع نقوم بإرسال وسائط ونقوم بحسابات معينة لها بواسطة معا

:تفهم ذلك إليك المثال التالي

using System; class Class1 { static void Main(string[] args) { int x = 15 ; int y = 8 ; int Sum = Fun_Type_4(x,y) ; Console.WriteLine("The Sum Of {0} & {1} Is : {2}",x,y,Sum); } static int Fun_Type_4(int x , int y) { return x+y ; } }

.قمنا بإرسال قيمتين وأرجعنا مجموعهما

:مالحظةعكـس . في النوعين األخيرين يجب أن تسند القيمة الراجعة إلى متغير أو تقوم بالطباعة بشكل فوري

.لوحدهما النوعين األولين فهناك يمكنك طباعة إسم الدالة لوحدها وبدون إسناد في سطر

OMS Jordan , Amman Tel : ( 00 962 79 6527425 ) [email protected]

Page 44: Learen C SHARP Fully

ثامنالدرس ال الكامل في السي شارب

ماذا بالنسبة للخروج اإلضطراري من الدالة ؟ ... ولكن

ولكـن هنـا األمـر Breakآما تعلمنا سـابقا أنـه بإمكانـك الخـروج مـن حلقـات التكـرار بواسـطة الجملـة حتى ولـو آـان نـوع الدالـة Returnمختلف ، فلكي تقوم بالخروج اإلضطراري من الدالة تستخدم آلمة

Void ال ترجع أي قيمة ، و هاك مثال على ذلك أي أنها:

using System; class Class1 { static void Main(string[] args) { char x =char.Parse(Console.ReadLine()); Console.WriteLine(Dont_5(x)); } static char Dont_5(char x) { if ( x == '5' ) { Console.WriteLine("Oh Dear You Cannot Use Number 5 ..."); return ' ' ; // Break } return x ; } }

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

OMS Jordan , Amman Tel : ( 00 962 79 6527425 ) [email protected]

Page 45: Learen C SHARP Fully

تاسعالدرس ال الكامل في السي شارب

بسم اهللا الرحمن الرحيم : المحاضرة التاسعة

: Console قسم الـ –الوسائط في الدوال و إآتشاف األخطاء

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

.رغبت في تغيير أمر ال تضطر لتغيير جزري في البرنامج آكل

حسنا في الدروس السابقة قمنا بإرسال متغيرات إلى الدوال بوسائل شـتى ، والـسؤال اآلن مـاذا لـو أردت أن أرسل مصفوفة آوسيط ؟ وآيف أفعل ذلك ؟

:قة إليك المثال التالي ثم نجاوب على األسئلة الساب

using System; class Class1 { static void Main() { int []Q =new int[4]{1,2,3,4}; Fun(Q); } static void Fun(int[] Q) { int Sum=0 ; for (int i=0 ; i<Q.Length; i++ ) Sum+= Q[i] ; Console.WriteLine("The Sum Is : {0}",Sum); } }

:ثال السابق قمنا بالتالي في الم . تعريف مصفوفة من النوع الصحيح وإسناد قيم أولية لعناصرها – 1 . آتابة دالة لجمع محتوى عناصر المصفوفة – 2 .foreach ألخذ محتوى عناصر المصفوفة ويمكنك أيضا إستخدام الجملة For إدخال جملة – 3 .ة في قائمة الوسائط الحظ أننا قمنا بتعريف مصفوفة داخل الدال– 4 . قمنا بإرسال إسم المصفوفة فقط إلى الدالة للتعامل معها – 5

:حسنا إليك الشرح اآلن قلنا سابقا أنه يجوز إرسال متغيرات إلى الدوال والتعامل معها ، ولم يختلف األمـر آثيـرا هنـا فقـد قمنـا

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

.الرئيسية

:مالحظة الباراميتر غير اإلسم المرسل ؟ يعني هل أستطيع أن أآتب إسم المصفوفة في هل يجوز آتابة إسم ؟ Qالدالة غير حرف الـ

أن تكتبها آما هي في الدالة التي Professionalمن اإلحترافية ! الجواب هنا نعم يمكنك التغيير ولكن . إستدعيتها منها

ير مـصفوفة وأريـد مـن الدالـة التعامـل مـع القـيم حسنا اآلن ماذا لو أني أردت أن أبعث قيم فقط من غ

!المرسلة آمصفوفة ومن غير حجم معين ، يعني أن أبعث قيم آما أشاء إلى دالة معينة

ولكي . هنا يجب عليك تعريف مصفوفة في الدالة وال يجب عليك إرسال مصفوفة من مكان اإلستدعاء

OMS Jordan , Amman Tel : ( 00 962 79 6527425 ) [email protected]

:تفهم ونناقش ما قلت إليك المثال التالي

Page 46: Learen C SHARP Fully

تاسعالدرس ال الكامل في السي شارب

using System; class Class1 { static void Main() { Fun(3,5,12,3); } static void Fun(params int[] Q) { int Sum=0 ; for (int i=0 ; i<Q.Length; i++ ) Sum+= Q[i] ; Console.WriteLine("The Sum Is : {0}",Sum); } }

O

باشرة من الدالة الرئيسية ولم نحدد عددها وقمنا بالتعامل معها الحظ معي هنا أننا قمنا بإرسال قيم م .آمصفوفة في الدالة

فيا هل ترى ما معناها ؟paramsولكن هنا آلمة جديدة وهي

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

:By referenceإرسال القيم

هل فكرت في إرسال قيمة إلى دالة معينة وأردت أن تجري عليها الدالـة تغييـرات وتـنعكس معـك بعـد !إستدعائها ؟ يعني أن تغير قيمة بواسطة دالة

، فقـد آنـا هنا تتيح لنا لغة السي شارب وآغيرها من اللغات إرسال المتغيرات وإجراء التعديالت عليهـا أي أننـا نبعـث القيمـة By Valueسابقا نبعث المتغيرات وال تؤثر عليها أبدا وآانت تسمى هذه الطريقة

.فقط وال يتم إجراء أي تعديالت عليها

آـان باإلمكـان التعامـل مـع ذلـك بواسـطة المؤشـرات Visual C++ 6.0فـي اإلصـدارات القديمـة مثـل .Pointerلكن في السي شارب ألغيت هذه الفكرة تماما ولم يعد هناك وPointer) بوينتر (

:ولكي تبعث متغير وتجري علية التغييرات إليك المثال التالي using System; class Class1 { static void Main() { int x = 5; Fun(ref x); Console.WriteLine("The New Value Of X Is : {0}",x); } static void Fun(ref int x) { x = 2*x; } }

ومعناهـا التغييـر علـى Reference إختـصار آلمـة refالحظ أننـا قمنـا بإسـتخدام الكلمـة المحجـوزة .الباراميتر

.ويجب علينا أيضا أن نكتبها في مكان اإلستدعاء وفي الدالة نفسها .بواسطة طباعة المتغير في الدالة الرئيسية 10وإذا نفذت البرنامج السابق سينتج الرقم

واآلن إلى قضية جديدة وهي ، ماذا لو أردت أن أعطي المتغير القيمة األولية في دالة معينة ؟ بمعنـى

ماذا لو أردت إعطاء أول قيمة للمتغير من خالل دالة ؟

MS Jordan , Amman Tel : ( 00 962 79 6527425 ) [email protected]

Page 47: Learen C SHARP Fully

تاسعالدرس ال الكامل في السي شارب

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

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

using System; class Class1 { static void Main() { int x ; Fun(out x); Console.WriteLine(x); } static void Fun(out int x) { x = 5; } }

من الدالة ومن مكان إستدعائها لظهر عندك الخطأ المعروف وهو أنـه ال Outفلو أنك قمت بحذف آلمة .يمكنك أن تبعث قيمة

مكـان اإلسـتدعاء وفـي في Out فإنه يجب عليك أن تضع جملة Refوآما الحال في الكلمة المحجوزة .مكان إستقبال الباراميتر

:Catch والجملة الرديفة Try و إآتشافه بواسطة Exceptionالخطأ

ماذا لو أننا آنا نشك في جملة أن ناتجها عبارة عن خطأ ، هل نترك مجال للخطأ أن يخرجنـا بـالقوة مـن البرنامج ؟

. آان البد فيجب معرفة المعالجة لهذا الخطأ إذن البد من إآتشاف األخطاء ومنع حدوثها وإذا

وهنا يجب وضـع الجمـل التـي نـشك أنـه Tryهنا تتيح لنا لغة السي شارب إآتشاف األخطاء بالجملة :سيحدث خطأ منها في داخل هذه الجملة آالتالي

try { Statement ; }

.Finally أو جملة Catchويجب أن تتبعها جملة )ولنأخذ خطأ القسمة على صفر : ( االت آالتالي ولهذه الجمل خمس ح

:الحالة األولى

: آالتالي Catch ثم نتبعها بجملة Tryوهو أن تأتي جملة using System; class Class1 { static void Main() { int x = 5 ; int y = 0 ; int z ; try { z = x/y ; } catch { Console.WriteLine("Error : Divide By Zero !!"); } }

OMS Jordan , Amman Tel : ( 00 962 79 6527425 ) [email protected]

}

Page 48: Learen C SHARP Fully

تاسعالدرس ال الكامل في السي شارب

في الحالة السابقة عرفنا أنه سيحدث خطأ القسمة على صفر ووضعنا الجملة التـي تـؤدي إلـى خطـأ .Catch وأتبعناها بجملة واحدة من Tryبين جملة

:الحالة الثانية

ولكـن Catchهو الخطأ ونتبعها بجملة وهي وضع مجموعة الجمل التي تؤدي أخطاء ولكننا ال نعرف ما :نعرف آائن من نعو الخطأ ونطبع ما هو الخطأ آالتالي

using System; class Class1 { static void Main() { int x = 5 ; int y = 0 ; int z ; try { z = x/y ; } catch ( Exception e ) { Console.WriteLine(e.Message); } } }

.الحظ سابقا أننا أخذنا آائن من نوع الخطأ وقمنا بإستعماله

:الحالة الثالثة : وذلك بكتابة الخطأ آالتالي Catch ولكن بأآثر من جملة Tryإستعمال الجملة

using System; class Class1 { static void Main() { int x = 5 ; int y = 0 ; int z ; try { z = x/y ; } catch ( DivideByZeroException ) { Console.WriteLine("Err : Divide By Zero"); } catch ( OverflowException ) { Console.WriteLine("Err : Over Flow"); } } }

.تحتاج آما Catchويجوز لك إختيار العدد المناسب من جمل

:الحالة الرابعة

OMS Jordan , Amman Tel : ( 00 962 79 6527425 ) [email protected]

. وهي جملة سيمر عليها البرنامج سواء أآان هناك خطأ أم لم يكن Finallyوهي إستخدام جملة

Page 49: Learen C SHARP Fully

تاسعالدرس ال الكامل في السي شارب

:وإليك مثال ذلك using System; class Class1 { static void Main() { int x = 5 ; int y = 1 ; int z ; try { z = x/y ; } finally { Console.WriteLine("Hello"); } } }

.الحظ في المثال السابق أنها تعتبر آمثابة جملة بعد حدوث الخطأ

:الحالة الخامسة وهي جامعة لألنواع األربعة السابقة وإليك مثال على Finally مع جملة Catchوهي إستخدام جملة

:هذه الحالة using System; class Class1 { static void Main() { int x = 5 ; int y = 0 ; int z ; try { z = x/y ; } catch(DivideByZeroException) { Console.WriteLine("Err : Divid By Zero"); } catch ( Exception e) { Console.WriteLine(e.Message); } finally { Console.WriteLine("There An Error !!"); } } }

.Finally وسيمر إجباريا على جملة Catchالحظ هنا أنه سيمر على جملة واحدة من جمل الـ

ماذا لو أنك أردت حدوث خطأ في برنامجك ؟؟.... ولكن وب ورأيت أن تلصق فيـه خطـأ مثال بالشكل المطل 2542باألصح ماذا لو آان برنامجك ال يتعامل مع الرقم

للتخلص من مشكلته ؟؟

OMS Jordan , Amman Tel : ( 00 962 79 6527425 ) [email protected]

هنا يجب عليك أن ترمي عليه خطأ وإال سيحدث عندك خطـأ معنـوي أي أن البرنـامج لـن يظهـر لـك أي .خطأ ولكن الخطأ سيؤثر تأثيرا آبيرا من الناحية المنطقية

Page 50: Learen C SHARP Fully

تاسعالدرس ال الكامل في السي شارب

: آالتالي Throwراعت لغة السي شارب هذه النقطة وقدمت لنا آلمة

:دوث أو الوصول للرقم المطلوب قم برمي خطأ عليه آالتالي عند حusing System; class Class1 { static void Main() { for ( int i=0 ; i < 20 ; i++ ) { if ( i == 13 ) throw ( new Exception()) ; Console.WriteLine ( i ) ; } } }

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

OMS Jordan , Amman Tel : ( 00 962 79 6527425 ) [email protected]

Page 51: Learen C SHARP Fully

عاشرالدرس ال الكامل في السي شارب

بسم اهللا الرحمن الرحيم : المحاضرة العاشرة

: Console قسم الـ – Stringمكتبة التعامل مع النصوص

وهو هنـا يعتبـر نـوح بحـد ذاتـه إضـافة Stringأتاحت لنا لغة السي شارب نوع جديد وهو النوع النصي Stringرها وهـو آـالس إلى وجود آالس آامل للعمليات التي نجريها عليها مثل اإلضافة والمقارنة وغي

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

.مصفوفة من متغير خاني ونقوم بملئها

: والعمليات المختلفة عليه رعريف المتغيسنتعرف الصيغة العامة لت

string var = "Value"; :الحظ هنا وجود اللون األزرق على النوع ، آذلك يمكنك إعطاء المتغير القيمة في سطر منفرد آالتالي

string var ; var = "Value" ;

:هنا آثير من المبرمجين آان بإمكانهم أخذ خانة خانة بواسطة هذا الكود

string Test ; Test = "ABCDEFG" ; Console.WriteLine(Test[5]);

:وآان بإمكانهم أيضا تغيير القيم ألي خانة آالتالي

string Test ; Test = "ABCDEFG" ; Test[3] = "!"; Test[3] = '!';

.لكن هنا األمر مختلف فمن الممنوع إستخدام ذلك بل ومن الخطأ آذلك : آما في الكود التالي Charذ خانة ووضعها في متغير خاني فهنا يمكنك أخ

string Test ; Test = "ABCDEFG" ; char f = Test[5]; Console.WriteLine(f);

بعـد Lengthبإسـتخدام الخاصـية ) الطـول ( وآذلك يمكنك الحصول على عدد الخانـات التـي تحتويهـا

:تعريف لمتغير النصي آالتالي string Test ; Test = "ABCDEFG" ; Console.WriteLine("Number Of Char Is : {0}",Test.Length );

: آالتالي Copyآذلك يمكنك نسخ نص إلى متغير نصي من خالل متغير آخر بإستعمال الدالة

string Test,ABC ; Test = "ABCDEFG" ; ABC = String.Copy(Test); Console.WriteLine(ABC );

والحـظ الفـرق بـين الكـالس ) Method( وأخـذنا منـه دالـة String هنا أننا إسـتخدمنا آـالس الــ الحظ .والنوع

OMS Jordan , Amman Tel : ( 00 962 79 6527425 ) [email protected]

Page 52: Learen C SHARP Fully

عاشرالدرس ال الكامل في السي شارب

:ي آالتالConcatويمكنك إضافة أو وصل متغير نصي بمجموعة من األحرف بإستعمال الدالة

string Test,ABC ; Test = "ABCDEFG" ; Test += String.Concat('H',"I","JKLM"); Console.WriteLine(Test );

.Stringالحظ هنا أننا قمنا بإستخدام آالس الـ : آالتالي Concat لدالة Overrideوهو هنا يعتبر ( + ) ويمكنك فعل السابق بواسطة معامل

O

string Test; Test = "ABCDEFG" ; Test += 'H' + "I" + "JKLM" ; Console.WriteLine(Test );

: آالتالي ( )Trimالموجود قبل وبعد الكلمة بواسطة الدالة ) Space( إزالة الفراغ وآذلك يمكنك

string Test; Test = " ABCDEFG " ; Test = Test.Trim(); Test += 'H' + "I" + "JKLM" ; Console.WriteLine(Test );

:لتالي آاToLower و ToUpperولجعل الحروف آبيرة أو صغيرة نستخدم الدالتان

string Test; Test = "AbCdEfG" ; Console.WriteLine(Test.ToUpper() + "\n" + Test.ToLower());

. أي أنه سيقوم بإضافة سطر جديد New Line وهنا تعني "n\"الحظ أننا إستخدمنا الجملة :فيمكنك هنا إضافتها للمتغير النصي آالتالي

string Test ; Test = "ABC\nDEF\nGHI" ; Console.WriteLine(Test);

. أسطر هنا 3فيقوم بطباعة :وهناك أيضا مجموعة مثل هذه الشاآلة آالتالي

Escape Sequence Represents \a Bell (alert) \b Backspace \f Formfeed \n New line \r Carriage return \t Horizontal tab \v Vertical tab \' Single quotation mark \" Double quotation mark \\ Backslash \? Literal question mark \ooo ASCII character in octal notation \xhhh ASCII character in hexadecimal notation

.MSDNوهذا الجدول مأخوذ من ملفات المساعدة

MS Jordan , Amman Tel : ( 00 962 79 6527425 ) [email protected]

Page 53: Learen C SHARP Fully

عاشرالدرس ال الكامل في السي شارب

:تغيرين من نوع نصي آالتالي ويمكنك أيضا إجراء عمليات المقارنة على م

using System; class Class1 { static void Main() { string TestA ; TestA = "ABC" ; Console.Write("Enter Your Text To Compare ( {0} ) : ",TestA); string TestB = Console.ReadLine() ; int Com = TestA.CompareTo(TestB) ; if ( Com == 0 ) Console.WriteLine("{0} = {1}",TestA,TestB); else if ( Com == 1 ) Console.WriteLine("{0} > {1}",TestA,TestB); else if ( Com == -1 ) Console.WriteLine("{0} < {1}",TestA,TestB); } }

ولـذلك إذا 1- أو 0 أو 1ع عدد صحيح وهي إمـا أن تكـون ويمكنك إستنتاج أنه يجب أن يرجع قيمة من نو .آان األول أآبر أو متساويين أو الثاني أآبر على التوالي

وهي أرقام مشفرة لكل خانة ASCII CODEوهنا يقوم المترجم بالمقارنة على أساس األسكي آود

غيـر a أي أن حـرف الــ ومع مراعاة أن لغة السي شارب هي لغة حـساسة . من خانات لوحة المفاتيح . ولكل واحد منهما رقم آسكي خاص به Aعن حرف الـ

:فإليك الجمل التالي ( = ) وهنا يجب التنبيه إلى أمر وهو معامل المساواة

using System; class Class1 { static void Main() { string TestA,TestB ; TestA = "ABC" ; TestB = "!!!"; Console.WriteLine(TestA == TestB); Console.WriteLine(TestA = TestB); } }

ففي جملة الطباعة األولى يقوم المترجم بطباعة متغير من نوع بولياني ومعناه هنا هل المتغيـر الـذي ويعني خطأ ، وأما False ويعني صحيح أو Trueعلى اليسار مساوي للذي على اليمين ؟ والجواب إما

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

OMS Jordan , Amman Tel : ( 00 962 79 6527425 ) [email protected]

Page 54: Learen C SHARP Fully

الحادي عشرةالدرس الكامل في السي شارب

بسم اهللا الرحمن الرحيم : المحاضرة الحادية عشر

: Console قسم الـ –) اإلدخال واإلخراج ( التعامل مع الملفات

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

ونـستطيع IOبداية يجب أن نستدعي مكتبـة الكالسـات لعمليـات اإلدخـال واإلخـراج وهـي مكتبـة الــ

: المعروفة آالتالي Usingإستدعائها و إستخدامها بالجملة

using System.IO;

.وإليك البرنامج التالي لنناقشه بالتفصيل وقـم بكتابـة txt.1 وسمه ما تريد وأي إمتداد تريـد سأسـميه هنـا C القرص قم بإنشاء ملف نصي على

:الكود التالي

using System; using System.IO; class Class1 { static void Main() { StreamReader r1 = new StreamReader("c:\\1.txt"); string line1 ; while ( (line1 = r1.ReadLine()) != null ) Console.WriteLine(line1); r1.Close(); } }

:نالحظ من البرنامج السابق لتنفيـذ جمـل الطباعـة والقـراءة مـن خـالل Input / Outputإستخدمنا مكتبة اإلدخال واإلخراج -

.ملف وهـو آـائن للقـراءة عـن ملـف موجـود وأسـندنا لـه مكـان StreamReaderأنشأنا آائن من نوع -

إلى أنك يجب أن تكتب اإلمتداد للملف بالكامل وذلك بإسم القرص ثـم التنبيه ف وهنا يجب المل يجـب وآل هذا . ثم إسم الملف و إمتداده ) \\( ثم أتبعه بشحطتين مائلتين ( : ) أتبعه برمز الـ

.Stringألنه عبارة عن متغير نصي (" ") أن يكون بين عالمتين تنصيص .ك لوضع سطر فيه من الملف عرفنا متغير نصي وذل - الـذي يـدل علـى r1قمنا بوضع حلقة تكرارية ألخذ سطر سـطر مـن الملـف مـن خـالل المتغيـر -

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

. فال يعتبره فراغا وإنما سطر فارغ ويقوم بطباعته Enterسطر فارغ بواسطة .Consoleوفي آل حلقة نقوم بطباعة السطر بواسطة الكونسول -قمنا بإغالق الملف ويجب علينـا إغالقـه بعـد إسـتعماله بكتابـة إسـم الكـائن ثـم إتباعـه بكلمـة -

Closeلته من الذاآرة أو حتى حمايته من العبث به واألخطاء والهدف من ذلك إزا.

. إعداد ملف مسبقا يجبآانت العملية السابقة للقراءة فقط و

[email protected]

Page 55: Learen C SHARP Fully

الحادي عشرةالدرس الكامل في السي شارب

:أما بالنسبة لعمليات الكتابة فإليك المثال التالي

using System; using System.IO; class Class1 { static void Main() { StreamWriter w1 = new StreamWriter("c:\\2.txt"); for ( int i=1 ; i<=5 ; i++ ) w1.WriteLine(i); w1.Close(); } }

:نالحظ من البرنامج السابق لتنفيـذ جمـل الطباعـة والقـراءة مـن خـالل Input / Outputإستخدمنا مكتبة اإلدخال واإلخراج -

.ملف آائن للكتابة في ملف غير موجود نقوم نحن بإنشاءه وهو StreamWriterأنشأنا آائن من نوع -

إلـى أنـك يجـب أن تكتـب التنبيـه وبأي إمتداد نريد وأسندنا له مكان الملـف الجديـد وهنـا يجـب ) \\( ثم أتبعه بشحطتين مائلتين ( : ) اإلمتداد له بالكامل وذلك بإسم القرص ثم أتبعه برمز الـ

ألنـه عبـارة عـن (" ") جب أن يكون بين عالمتـين تنـصيص وآل هذا ي . ثم إسم الملف و إمتداده : بعد إسم الملف آالتالي Trueويمكن إضافة آلمة . Stringمتغير نصي

- StreamWriter w1 = new StreamWriter("c:\\2.txt",true);

لملف وتريد وتستخدم الجملة السـابقة في حالة أنك رغبـت في اإلحتفاظ بالمحتويات القديمة ل . اإلضافة فقط

الذي يدل علـى عمليـة w1قمنا بوضع حلقة تكرارية إلضافة سطر من الملف من خالل المتغير - .الكتابة على الملف

.Consoleوفي آل حلقة نقوم بطباعة السطر بواسطة الكونسول -قمنا بإغالق الملف ويجب علينـا إغالقـه بعـد إسـتعماله بكتابـة إسـم الكـائن ثـم إتباعـه بكلمـة -

Close أيـضا ننبـه و. والهدف من ذلك إزالته من الذاآرة أو حتى حمايته من العبث بـه واألخطـاء .هنا أنك إذا لم تقم بإغالقه فلن يعدل أي شيء عليه

فإذا أردت أن تكتب خانة . نك الكتابة أو القراءة خانة خانة أو بسطر وفي آال العمليتان السابقتان فبإمكا :خانة وعلى السطر يمكنك ذلك وبتعديل بسيط وهو

w1.Write(i);

: أما بالنسبة للقراءة

using System; using System.IO; class Class1 { static void Main() { StreamReader r1 = new StreamReader("c:\\1.txt"); char[] c = null; while (r1.Peek() >= 0) { c = new char[1]; r1.Read(c, 0, c.Length); Console.Write(c); } }

[email protected]

Page 56: Learen C SHARP Fully

الحادي عشرةالدرس الكامل في السي شارب

}

. فستالحظ الفرق 5 يساوي cوجرب إذا جعلت طول المتغير الخاني

:Boxingعملية التغليف وهـو يأخـذ جميـع األنـواع وإذا قمنـا Objectتكلمنا سابقا عن األنواع وتكلمنا أيضا أنه يوجد نوع إسـمه

وإذا قمنا بأخذ قيمه منه مـن خـالل متغيـر آخـر تـسمى Boxingبإسناد قيمة إليه تسمى هذه العملية : وإليك مثاال على ذلك UnBoxingالعملية

using System; class Class1 { static void Main() { int x ; string s ="Welcome" ; object o ; o = 5 ; //Boxing x = (int)o ; // UnBoxing Console.WriteLine(x); o = "RTAQ" ; //Boxing s = (string)o ; //UnBoxing Console.WriteLine(s); } }

:namespaceطة الكلمة إستخدام دوال بواس

وإليـك namespaceبإمكانك تقسيم البرنامج إلى قسمين وبواسطة آلمة تجميع الـدوال إلـى مكتبـات :مثاال على ذلك

using System; namespace C1 { class Class1 { static void Main() { Console.WriteLine("I am Now In Class 1 ..."); C2.Class2.Fun(); } } } namespace C2 { class Class2 { public static void Fun() { Console.WriteLine("I am Now In Class 2 ..."); } } }

[email protected]

Page 57: Learen C SHARP Fully

الحادي عشرةالدرس الكامل في السي شارب

: آالتالي وآما قلنا سابقا 1وال تنسى أن تضع نقطة البداية بواسطة الكالس

أو مـن خـالل الـزر األيمـن 2ثم قم بإختيار الخصائص من خـالل الـرقم 1إختر مشروعك من خالل الرقم ثـم إذهـب إلـى إقـالع الكـائن آمـا 3للماوس ومن ثم إختر خصائص ، ثم قم بإختيار عام آما في الرقم

ثـم قـم بالـضغط 5 ثم قم بإختيار أي آالس من الكالسات الموجودة عندك آمـا فـي الـرقم 4في الرقم . بالبدء من الكالس الذي حددته على موافق وهنا يقوم

. فقط C1.Class1ولكن هنا ستالحظ وجود

لحظ هنا أننا قمنا بإستدعاء الدالة الموجودة في مكتبة ثانية وذلك بذآر إسم المكتبـة ثـم إسـم الدالـة

.Publicمباشرة ويجب أن تنتبه هنا أنه يجب أن تكون الدالة المستدعاة من نوع عام

:سابق وبواسطة إستدعاء المكتبة بإستعمال الجملة التالي ويمكنك فعل ال

using C2; :يومناداة الكالس مباشرة آالتال

Class2.Fun();

:ليصبح البرنامج آالتالي

using System; using C2;

[email protected]

Page 58: Learen C SHARP Fully

الحادي عشرةالدرس الكامل في السي شارب

namespace C1 { class Class1 { static void Main() { Console.WriteLine("I am Now In Class 1 ..."); Class2.Fun(); } } } namespace C2 { class Class2 { public static void Fun() { Console.WriteLine("I am Now In Class 2 ..."); } } }

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

O M S

[email protected]

Page 59: Learen C SHARP Fully

عشرانيةثالالدرس الكامل في السي شارب

بسم اهللا الرحمن الرحيم : الثانية عشر المحاضرة

: Console قسم الـ – Scopeالتوارث ومفهوم الـ

:لو قمنا بكتابة البرنامج التالي using System; class Class1 { static void Main() { int x = 5 ; Console.WriteLine(x); } int x = 100 ; }

وما القيمة الناتجة من ذلك ؟؟فماذا تتوقع أن يحدث ؟؟ : آالتالي Scopeهنا سنتعرف على مفهوم

النطاق الذي يتم تعريف المتغير به فلو الحظنا في المثال السابق فنطـاق المتغيـر بأنه Scope يعرف -x الموجود في الدالة الرئيسية هو :

{ int x = 5 ; Console.WriteLine(x); }

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

ومن هذه القوانين أيضا أنه يـشاهد فـي النطـاق الـداخل مـالم يكـون ) . {( الوصول إلى قوس النهاية .Overrideناك متغير يحمل نفس اإلسم وإن آان فسوف يعمل له ه

الخارجي وقمنا بإستخدام متغير آخـر يحمـل نفـس اإلسـم xففي المثال السابق قمنا بتعريف المتغير في الجزء الداخلي وفي جملة الطباعة لم يتعرف المترجم سوى على المتغير الذي رآه آخر مـرة وهـو

.الداخلي :تاليالمثال اللنتائج في االحظ معي

using System; class Class1 { int x = 43 ; static void Main() { Class1 C1 = new Class1(); Console.WriteLine(C1.x); int x = 12 ; Console.WriteLine(x); } }

:و آالسات آالتالي ومن هنا يمكن القول أننا بإمكاننا أن نفتح أقواس بدون إسم دوال أ

using System; class Class1 { static void Main() { Console.Write("Welocme"); { Console.Write(" In This"); { Console.WriteLine(" Program");

[email protected]

Page 60: Learen C SHARP Fully

عشرانيةثالالدرس الكامل في السي شارب

} } } }

.مل نفس اإلسم هنا أنه ال يجوز تعريف نفس متغير موجود في القوس األعلى منه يحننبهو :آما في المثال التالي

using System; class Class1 { static void Main() { int x = 15 ; { int x = 5 ; } } }

ولكن إذا قمنا بتعريفه في سكوبين متساويين ففي هذه الحالة النـاتج صـحيح آمـا .سينتج معك خطا :يلي

using System; class Class1 { static void Main() { { int x = 5 ; } { int x = 7 ; } } }

:Constructorسنتحدث اآلن عن موضوع جديد وهو الـ ؟ من الكالس مثال على الصيغة العامة objectهل فكرت مرة من المرات لماذا تقوم بكتابة

Class1 C1 = new Class1(); ------------------------------------^

.كونسترآترالكائن الجديد هو من نوع الكالس األب وعملية فتح األقواس هنا تعني أنه قم بإستدعاء ال ولكن ما هو الكونسترآتر ؟

وال ) ال يجوز إستخدامها إال مـع الكالسـات فقـط ( هو عبارة عن دالة أو ميثود تحمل نفس إسم الكالس . نوع ترجع أي قيمة وليس لها أي

:وإليك مثال عليها using System; class Class1 { public Class1() { Console.WriteLine("Welcome To RTAQ"); } static void Main() { } }

ما وظيفته ؟: ولكن هنا السؤال المهم

[email protected]

Page 61: Learen C SHARP Fully

عشرانيةثالالدرس الكامل في السي شارب

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

:يفلو نفذنا المثال التالusing System; class Class1 { static void Main() { Class2 C2 = new Class2(); } } class Class2 { public Class2() { Console.WriteLine("Welcome"); Console.WriteLine("In"); Console.WriteLine("C#"); } }

.كونسترآتر يقوم به ال والباقي Class2في المثال السابق لم نقوم سوى بإنشاء آائن فقط من نوع آمـا فـي المثـال ) وهـي المهمـة الرئيـسية لـه ( وبإمكانك أيضا وضع باراميتر أو وسائط للكونـسترآتر

:التالي using System; class Class1 { static void Main() { Class2 C2 = new Class2(1,3); } } class Class2 { public Class2(int x,int y) { Console.WriteLine("The Sum Is : {0}",x+y); } }

.نامج بعث قيم عندما تقوم بإنشاء آائن وغير ذلك سينتج خطأ في البر هنا أنه يجب عليك ننبهو .آما تعلمت سابقا لكي نستطيع إستدعاءه من آالس آخر publicوأيضا يجب وضع آلمة

حسنا ولكننا آنا سابقا نستدعي الكالس بدون آتابة الكونسترآتر فكيف ذلك ؟

:وفيه التالي ووهمي افتراضي رتقوم لغة السي شارب بوضع آونسترآتو public Class1() { }

. هو إسم الكالس Class1حيث أن اإلسم

: Inheritanceالتوارث ونـستطيع شـرح هـذه الفكـرة OOPفكرة التوارث أهـم فكـرة مـن أفكـار البرمجـة الموجهـة باألهـداف

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

:آالتالي بة الكالس األب بعد الكالس وآتا( : ) بوضع إشارة

[email protected]

Page 62: Learen C SHARP Fully

عشرانيةثالالدرس الكامل في السي شارب

using System; class Class1:Class2 { static void Main() { Class1 C1 = new Class1(); C1.print(); } } class Class2 { public void print() { Console.WriteLine("Welcome In C#"); } }

Class1 وهي غيـر موجـودة فـي الكـالس ()printالحظ في المثال السابق أننا قمنا بإستعمال دالة .ولكن هنا قمنا بعملية وراثة من آالس أخرى

.Private وآل الباقي يعتبر خاص publicوعملية التوارث تتم فقط على الدوال ذات النوع

نسترآتور آما في المثال التالي ؟ولكن ماذا لو إحتوى الكالس األب آو

using System; class Class1:Class2 { static void Main() { Class1 C1 = new Class1(); } } class Class2 { public Class2() { Console.WriteLine("Welcome In C#"); } }

.أآيد سيعمل على تنفيذ الكونسترآتر لألب :ود التالي لتتضح الصورة لك أآثر سنناقش الك

using System; class Class1:Class2 { public Class1() { Console.WriteLine("I am Now In Class 1"); } static void Main() { Class1 C1 = new Class1(); } }

[email protected]

Page 63: Learen C SHARP Fully

عشرانيةثالالدرس الكامل في السي شارب

class Class2:Class3 { public Class2() { Console.WriteLine("I am Now In Class 2"); } } class Class3 { public Class3() { Console.WriteLine("I am Now In Class 3"); } }

لكـن هـذا الكـالس هـو عبـارة عـن وارث مـن الكـالس Class1الحظ هنا أننا نقوم بإنشاء آائن من نـوع Class2 الكالس األب عبـارة عـن وارث األب ولكن ولهذا فإنه سينفذ الكونسترآتر الموجود في الكالس

.Class3 لذلك سيقوم بتنفيذ الكونسترآتر الموجود في الكالس Class3من الكالس :وهنا سيكون الناتج آالتالي

I am Now In Class 3 I am Now In Class 2 I am Now In Class 1

ماذا لو حمل اإلبن دالة موجودة في األب آما في المثال التالي ؟ونهاية

using System; class Class1:Class2 { public void print() { Console.WriteLine("I am Now In Class 1"); } static void Main() { Class1 C1 = new Class1(); C1.print(); } } class Class2 { public void print() { Console.WriteLine("I am Now In Class 2"); } }

تتوقع ؟ماذا فسيقوم بحذف الميثود الموجودة في الكالس األب وسيقوم بتنفيـذ الميثـود الموجـود فـي الكـالس هنا

:هنا سيكون الناتج و.اإلبن I am Now In Class 1

O M S

[email protected]

Page 64: Learen C SHARP Fully

ة عشرلثثاالالدرس الكامل في السي شارب

بسم اهللا الرحمن الرحيم : المحاضرة الثالثة عشر

: Console قسم الـ – وعملية توارث األب من اإلبنInterfaceالـ

والدوال الموجودة فـي آـالس آخـر وسـمينا هـذه تعلمنا سابقا آيف نقوم بتوريث آالس لبعض الميثود .العالقة بعملية توارث اإلبن من خصائص أبيه

:فلو نظرنا إلى المثال التالي

using System; class Class1 { static void Main() { B b = new B(); b.PrintA(); b.PrintB(); } } class A { public void PrintA() { Console.WriteLine("Class A"); } } class B:A { public void PrintB() { Console.WriteLine("Class B"); } }

.الحظنا أننا عرفنا آالس إبن من آالس أب وورث جميع صفاته باإلضافة إلى الصفات الموجودة عنده ص إبنه ؟ولكن هل يجوز لنا أن نأخذ آائن من نوع األب يحتوي على خصائ

:لكي تتضح لك الصورة أآثر أنظر إلى المثال التالي

using System; class Class1 { static void Main() { B b = new B(); b.Print(); } } class A { public void Print() { Console.WriteLine("Class A"); } }

[email protected]

Page 65: Learen C SHARP Fully

ة عشرلثثاالالدرس الكامل في السي شارب

class B:A { public void Print() { Console.WriteLine("Class B"); } }

ماذا تتوقع أن يطبع ؟;()b.Printعند تنفيذ الجملة التالية

وهـذا آـالم خطـأ فعنـدما يـصل إلـى الجملـة !! . ألنـه األب Aأآيد سيقوم بطباعة الدالة الموجودة في Overrideيقـوم بعمـل المعنية يأخذ دالة األب بالحسبان ويخزنها عنـده وعنـدما يـصل إلـى دالـة اإلبـن

:يخزن بدال منها دالة اإلبن وبالتالي سيقوم بطباعة الجملة التالية و) التابعة لألب ( للدالة السابقة

Class B :حسنا إليك طريقة توريث األب الصفات والخصائص من إبنه بالكود التالي

using System; class Class1 { static void Main() { A a = new B(); a.Print(); } } class A { public virtual void Print() { } } class B:A { public override void Print() { Console.WriteLine("Class B"); } }

:ونستطيع مالحظة التالي :قمنا بعمل آائن لألب من نوع اإلبن آما في الجملة التالية -

A a = new B();

يجــب وضــع دالــة مــن نفــس نــوع و إســم الدالــة الموجــودة فــي اإلبــن عنــد األب آمــا فــي الجملتــان - :المنفصلتان

public virtual void Print() public override void Print()

فـي الدالـة الموجـودة فـي آـالس األب والتـي تخبرنـا بأخـذ المحتـوى virtualقمنا بإضافة آلمة - .إلبن للدالة من ا

فـي الدالـة الموجـودة فـي آـالس اإلبـن والتـي تخبرنـا بأننـا سـنقوم overrideقمنا بإضافة آلمة - .بالكتابة فوق دالة من نفس اإلسم والنوع عند آالس األب

.فقط بدون آتابة الكود داخلها ألننا سندخله الحقا الحظ أننا قمنا بكتابة إسم الدالة -

[email protected]

Page 66: Learen C SHARP Fully

ة عشرلثثاالالدرس الكامل في السي شارب

ولكن ما الفائدة من هذه العملية ؟؟: واآلن لعلك تتساءل

:سأضرب لك مثاال على آيفية اإلستفادة منه بالمجال العملي فلنفـرض هنـا أنـه يوجـد آـالس . لنفرض أننا في معرض سيارات وأردت معرفة سـرعة سـيارة معينـة

أساسي وهو السيارة ويوجد آالسات تتـوارث صـفات الـسيارة وبهـا تخصيـصات مثـل أنـواع الـسيارات سيارة ولنفترض فهنا يجب أن تعرف نوع ال... مرسيدس ، تويوتا ، هوندا ، وهونداي ، وغيرها : المختلفة

ولكي نقوم بعرض سرعة السيارة يجب معرفة صنفها ونوعهـا ، ) CIVIC( أنها من نوع هوندا سيفيك :وآل الكالم السابق يمكن ترجمته إلى آود آالتالي

using System; class CarExhibition { static void Main() { Honda h1 = new CIVIC(); h1.Speed(); } } class Honda { public virtual void Speed() { } } class CIVIC:Honda { int Spd = 160 ; public override void Speed() { Console.WriteLine("Honda CIVIC Speed Is : {0} MPH",Spd); } }

:Interfaceولننتقل إلى موضوع جديد وهو الواجهات ولكـن الموضـوع !! قد يـذهب ذهنـك إلـى الـشاشات و الواجهـات المـستخدمة فـي تطبيقـات الوينـدوز

:ي الآالت Interfaceفيمكن تعريف الـ . مختلف هنا دوال و ميثود ولكن من غير آود يحتوي على أسماء وأنواع ل ) مثل الكالس ( هو عبارة عن وحدة نمطية

وال يحتـوي علـى بـاراميتر أي أنـه ال ، حيث يتم تعريف آود في آالس آخر يرثها جميعا ويقوم بتعريفها ، :صيغة العامة له وإليك ال، ( ) يستعمل األقواس بعد تعريفه

interface InterfaceName { Methods(); }

:ولنأخذ مثاال على آيفية إستعماله

using System; class Class1 { static void Main() { Class2 c1 = new Class2(); Console.Write("Enter First Number : "); float x = float.Parse(Console.ReadLine());

[email protected]

Page 67: Learen C SHARP Fully

ة عشرلثثاالالدرس الكامل في السي شارب

Console.Write("Enter Second Number : "); float y = float.Parse(Console.ReadLine()); c1.Sum(x,y); c1.Subtraction(x,y); c1.Product(x,y); c1.Divide(x,y); } } interface Operation { void Sum(float x , float y); void Subtraction(float x , float y); void Product(float x , float y); void Divide(float x , float y); } class Class2:Operation { public void Sum(float x , float y) { Console.WriteLine("{0} + {1} = {2}",x,y,x+y); } public void Subtraction(float x , float y) { Console.WriteLine("{0} - {1} = {2}",x,y,x-y); } public void Product(float x , float y) { Console.WriteLine("{0} * {1} = {2}",x,y,x*y); } public void Divide(float x , float y) { Console.WriteLine("{0} / {1} = {2}",x,y,x/y); } }

:تلخيص البرنامج السابق بالتالي يمكن .وقمنا بكتابة أربع دوال داخله Operation وسميناه interfaceقمنا بإنشاء -وأيـضا لـم interfaceـ مال الدوال خارج الـ تع الدالة على إس public الحظ أننا لم نقوم بكتابة آلمة -

.نقوم بكتابة الكود فيهم ألننا سنقوم بكتابتهم في آالس آخر .interfaceودة في الـ عرفنا آالس آخر وقمنا بتوريثه جميع الدوال الموج - . لكي نستعملها في دالة أخرى publicقمنا بتحديد نوع الدوال داخل الدالة من خالل آلمة -

. وآيفية إستعماله interfaceمن المثال السابق نكون قد فهمنا معنى الـ راج أسـماء الـدوال التـي يتطلبهـا المـشروع ومـن ثـم نقـوم بكتابـة الكـود منه هو أننا نقوم بإد والفائدة

.الخاص بهم على مهلنا وفي آالس آخر من حيث عملية التوارث

O M S

[email protected]

Page 68: Learen C SHARP Fully

ة عشرابعرالالدرس الكامل في السي شارب

بسم اهللا الرحمن الرحيم : عشر ابعةرالمحاضرة ال

: Console قسم الـ – آالسAbstract آالس والـ Sealedالـ

. وطريقة توريثها Interfaceسابقا آيفية التوارث بين الكالسات المختلفة وأخذنا مفهوم الـ تعلمنا !!!ث أي أنه عقيم لو أنك تريد آالس يرث وال يورماذا !! ؟ولكن

قبل إسم الكالس الذي ال نريد أن نورثـه ، وإليـك آيفيـة Sealedهذه الحالة نستخدم أو نضع آلمة في :إستعماله والتعامل معه

using System; sealed class Class1 { static void Main() { Class2 c2 = new Class2(); } public static void print() { Console.WriteLine("Welcome ..."); } } class Class2:Class1 { public Class2() { //Constructor } }

ولذلك إذا قمنـا بتنفيـذ البرنـامج الـسابق سـتظهر لنـا ث بحيث أنه ال يور 1أننا قمنا بوضع الكالس الحظ :الجملة التالي

'Class2' :cannot inherit from sealed class 'Class1'

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

: فلو أننا قمنا بتنفيذ الكود التالي Mathبالعمليات الحسابية الرياضية المثال الكالس الخاص

using System; class Class1:Math { static void Main() { Console.WriteLine("Welcome ..."); } }

: التالي الخطأسينتج عندنا نه إف

'Class1' : cannot inherit from sealed class 'System.Math'

.ميثود أو أي خاصية داخله نريد أن يورث منه أي وأهم إستعمال له أننا قمنا بعمل آالس ال

[email protected]

Page 69: Learen C SHARP Fully

ة عشرابعرالالدرس الكامل في السي شارب

: آالس Abstract ميثود و الـ Abstractالـ وال تحتوي على وقنا أنه مشابه للكالس وأنه يحتوي على ميثود Interfaceمفهوم الـ عن سابقاتحدثنا

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

تحتوي على آود فكيف نفعل ذلك ؟؟ ولكـي تفهـم Abstract وبالتالي أيـضا نـوع الكـالس سيـصبح Abstractال بد من جعل نوع الميثود هنا

:تالي لعلى ما أقول إليك المثال ا

using System; abstract class Class1 { static void Main() { Class2 c2 = new Class2(); c2.Print(); } abstract public void Print(); } class Class2:Class1 { public override void Print() { Console.WriteLine("Test Abstract ..."); } }

فـي ا وقمنـا بكتابـة الكـود لهـ Print وهـي الدالـة Class1دالة فـي قمنا بتعريف المثال السابق ي ف .الكالس الثاني

فيجـب أن نـضع نـوع Abstract أنـه مـا دام عنـدنا ميثـود أو دالـة واحـدة فقـط نوعهـا ننبهيجب أن وهنا . ويمكن مشاهدة ذلك في المثال السابق Abstractالكالس الحاوي لها من نفس نوعها أي

:Get و الـ Setالـ جملتي

:نظرنا إلى المثال التالي لو using System; class Class1 { static void Main() { int x = 5 ; Console.WriteLine( x ); } }

.5رقم الهو الناتج ؟؟ أآيد ا م :يالتال، إليك المثال سنزيدها صعوبة حسنا

using System; class Class1 { static void Main() { Class2 c2 = new Class2(); Console.WriteLine( c2.x ); } } class Class2

[email protected]

Page 70: Learen C SHARP Fully

ة عشرابعرالالدرس الكامل في السي شارب

{ int x = 5 ; }

؟؟ناتجها ما

:Task Listالـ بتنفيذها وسوف تظهر لك الجملة التالية في شاشة قم

'Class2.x' is inaccessible due to its protection level

لماذا ؟؟ ولكن ي وأننا ال نستطيع الحصول عليه هو متغير خاص بالكالس الثانxالبرنامج السابق إعتبر أن المتغير في

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

رات الخاصـة واللتـان تعنيـان أننـا سـنقوم بأخـذ محتـوى المتغيـ Get و Setهذا السؤال أتـت جملتـا من :وجعلها عامة وإليك مثاال عليهما

using System; class Class1 { static void Main() { Class2 c2 = new Class2(); Console.WriteLine( c2.SGXV ); c2.SGXV = 7 ; Console.WriteLine( c2.SGXV ); } } class Class2 { int x = 3 ; public int SGXV // Set & Get X Variable { set { x = value ; } get { return x ; } } }

:مالحظة التالي من المثال السابق مكن ي .) للداللة على المعنى إختصار ( قمنا بكتابة دالة جديدة لها معنى - . المحجوزة والتي تدل على عملية إعطاء قيمة Setبكتابة جملة قمنا - . الذي يعتبر متغير عالي ويمكن مشاهدته xأو بإسناد قيمة إلى المتغير بكتابة قمنا - .والتي تدل على عملية إرجاع قيمة المحجوزة Getبكتابة جملة قمنا - .Return بإستخدام آلمة اإلرجاع xبإرجاء قيمة المتغير قمنا -

ولماذا لم تذآرها ؟؟ valueلعلك تسأل ما هي الكلمة المحجوزة ولكن .آلمة تدل على قيمة تسند إلى المتغير من خالل دالة هذه

: للمتغير الخاص بواسطتهما وهما خرج بمصطلحينن يمكن أن Get و Setوبواسطة الجملتان

.Set فقط وال نستخدم جملة Getوم بإستخدام جملة وهنا نق : Read Onlyالـ مصطلح .Get فقط وال نستخدم جملة Setوم بإستخدام جملة وهنا نق : Write Onlyالـ مصطلح

O M S

[email protected]

Page 71: Learen C SHARP Fully

عشرامسخالالدرس الكامل في السي شارب

بسم اهللا الرحمن الرحيم : عشر امسةخالمحاضرة ال

: Console قسم الـ – Indexer والـ Event واألحداث Delegateالـ

) :المندوب ( Delegateالـ

د ويجب أن يكون نوعه من نفس نـوع الدالـة التـي بأنه متغير يدل على دالة أو ميثو Delegateيعرف الـ :يقوم بالتأشير عليها وإليك ما قلت

Method

A

:وبالنسبة لتعريفه والتعامل معه إليك المثال التالي

using System; delegate void MyDelegate(int i); class Class1 { public static void Main() { MyDelegate d1 = new MyDelegate(MethodA); MethodB(d1); } public static void MethodB(MyDelegate md) { md(21); //A امليثود إستدعينا آأننا } public static void MethodA(int i) { System.Console.WriteLine("Called by delegate : {0}.", i); } }

:في المثال السابق

. من نوع الدالة التي سنقوم بالتأشير عليها Delegateقمنا بتعريف - .d1 وهو هنا Delegate قمنا بتعريف متغير من نوع في الدالة الرئيسية - .Delegateوالحظ هنا أننا قمنا بالتأشير على دالة من نفس نوع الـ - . بواسطة الباراميتر Delegateالمتغير إلى دالة تتعامل مع الـ قمنا بإرسال - . قمنا بإستدعاء المتغير من خالل الباراميتر في الميثود - إستدعينا الدالة الرئيسيةوهنا نفذها آأننا -

يمكنك أيضا طالما أن النوع موحد في جميع الدوال أن تقوم بالتأشير على أآثر من ميثود في البرنـامج فعلى سبيل المثال ماذا لو أردنا أن نجري العمليات األربعة بواسطة متغير واحد فقط ؟

:إليك الحل في المثال التالي

[email protected]

Page 72: Learen C SHARP Fully

عشرامسخالالدرس الكامل في السي شارب

using System; public delegate void MyDelegate(float x , float y); class Class1 { static void Main() { Class2 c1 = new Class2(); Console.Write("Enter First Number : "); float x = float.Parse(Console.ReadLine()); Console.Write("Enter Second Number : "); float y = float.Parse(Console.ReadLine()); MyDelegate d1 = new MyDelegate(c1.Sum); // add Sum d1 += new MyDelegate(c1.Subtraction); // Sum + Sub d1 += new MyDelegate(c1.Product); // Sum + Sub + Prod d1 += new MyDelegate(c1.Divide); // Sum + Sub + Prod + Div d1(x,y); // Call Four Method --> Sum + Sub + Prod + Div } } class Class2 { public void Sum(float x , float y) { Console.WriteLine("{0} + {1} = {2}",x,y,x+y); } public void Subtraction(float x , float y) { Console.WriteLine("{0} - {1} = {2}",x,y,x-y); } public void Product(float x , float y) { Console.WriteLine("{0} * {1} = {2}",x,y,x*y); } public void Divide(float x , float y) { Console.WriteLine("{0} / {1} = {2}",x,y,x/y); } }

جملة واحدة ، وأآثر فائدة لهذه الجملة فكما الحظنا في المثال السابق قمنا بإستدعاء أربعة دوال في

.في تطبيقات الويندوز التي سنتعرف عليها قريبا

:Eventاألحداث

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

وآتوضيح Delegateنا يتعامل الحدث مع مجموعة من الدوال بل باألحرى يتعامل مع مجموعة من الـ وه :على مفهوم الحدث إليك المثال التالي

using System; public delegate void Paper(); // delegate declaration class Class1 { static event Paper FireEvent; // event declaration

[email protected]

Page 73: Learen C SHARP Fully

عشرامسخالالدرس الكامل في السي شارب

static public void Main () { FireEvent += new Paper(Burn); FireEvent(); } static private void Burn() { Console.WriteLine("The Event Of ( Fire + Paper ) Is : Burn"); } }

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

.الخ .... واحدة أو النقر مرتين أو مرور الفأرة فوقه .Delegate هنا أن الحدث ال يأخذ سوى مؤشرات للدوال أي ننبهو

:وإليك مثاال آخر على مفهوم الحدث

using System; public delegate void MyDelegate(); // delegate declaration public interface I { event MyDelegate MyEvent; void FireAway(); } public class MyClass: I { public event MyDelegate MyEvent; public void FireAway() { if (MyEvent != null) MyEvent(); } } public class Class1 { static private void f() { Console.WriteLine("This is called when the event fires."); } static public void Main () { I i = new MyClass(); i.MyEvent += new MyDelegate(f); i.FireAway(); } }

:Indexerالتعامل مع المصفوفات الجزئية بواسطة الـ : ، لو نظرنا إلى المثال التالي تعرفنا على مفهوم المصفوفات قبال

[email protected]

Page 74: Learen C SHARP Fully

عشرامسخالالدرس الكامل في السي شارب

using System; class Class1 { static public void Main () { int []a = new int[20]; Random r1 = new Random(); for ( int i = 0 ; i < 20 ; i++) { a[i] = r1.Next(20); Console.WriteLine("a[{0}] = {1}",i,a[i]); } } }

.عن إعطاء قيم أولية للعناصر في المصفوفة عشوائيا آما شرحنا عنها سابقا لعرفنا أن المثال يتحدث :ولكن لو آانت المصفوفة في آالس آخر هل نستطيع التعامل معها أي آما في المثال التالي

using System; class Class1 { static public void Main () { Class2 c2 = new Class2(); c2.a[15] = 7 ; Console.WriteLine(c2.a[3]); } } class Class2 { int []a = new int[20]; public Class2 () { Random r1 = new Random(); for ( int i = 0 ; i < 20 ; i++) { a[i] = r1.Next(20); } } }

:ج معنا خطأين من نوع آما في المثال السابق سينت

'Class2.a' is inaccessible due to its protection level

ولكن آيف أستطيع التعامل معها على الرغم من أنها خاصة بالكالس الثاني ؟؟

وإليــك الحــل لهــذه ) Get و Setبإســتعمال جملتــي ( ســبق لنــا أن وقعنــا فــي هــذه المــشكلة أتــذآر :لتالي المشكلة آما في المثال ا

using System; class Class1 { static public void Main () { Class2 c2 = new Class2(); c2[18] = 7 ;

[email protected]

Page 75: Learen C SHARP Fully

عشرامسخالالدرس الكامل في السي شارب

Console.WriteLine(c2[18]); } } class Class2 { int []a = new int[20]; public Class2 () { Random r1 = new Random(); for ( int i = 0 ; i < 20 ; i++) { a[i] = r1.Next(20); } } public int this [int index1] { set { if ( index1 >= 0 && index1 <20) a[index1] = value ; } get { if ( index1 >= 0 && index1 <20) return a[index1]; else return 0; } } }

:الحظ معي

. في الدالة الثانية public int this [int index1]قمنا بإنشاء دالة بإستخدام الجملة - .Indexer الدالة على الكالس الثاني ثم عرفنا الـ Thisذآرنا فيها الكلمة المحجوزة - . نتعامل معه في الكود التالي Index آـ index1عرفنا المتغير - .Getو Setقمنا بإستعمال جملتي - .Setقمنا بإدخال شروط في جملة - . ومعناها أنه إذا لم يكن العنصر موجود else فيجب أن نضع فيها جملة Setأما في جملة -

:Indexerوهذا مثال آخر على الـ

using System; class IndexerClass { private int [] myArray = new int[100]; public int this [int index] // Indexer declaration { get { // Check the index limits. if (index < 0 || index >= 100) return 0; else return myArray[index]; } set { if (!(index < 0 || index >= 100)) myArray[index] = value;

[email protected]

Page 76: Learen C SHARP Fully

عشرامسخالالدرس الكامل في السي شارب

} } } public class Class1 { public static void Main() { IndexerClass b = new IndexerClass(); // Call the indexer to initialize the elements #3 and #5. b[3] = 256; b[5] = 1024; for (int i=0; i<=10; i++) { Console.WriteLine("Element #{0} = {1}", i, b[i]); } } }

:خاتمة و سنبدأ من الدرس التالي بإستخدام تطبيقـات Consoleإلى هنا نكون قد ختمنا العمل مع الكونسول

.Windows Applicationالنوافذ

O M S

[email protected]

Page 77: Learen C SHARP Fully

سادس عشرةالدرس ال الكامل في السي شارب

بسم اهللا الرحمن الرحيم : سادسة عشرالمحاضرة ال

: Windows قسم الـ –بيئة الفيجوال ستوديو دوت نيت : قبل التحدث والدخول إلى هذه البيئة يجب أن تمتلك نسخه منها وعنوانها -

Microsoft Visual Studio .NET 2003 منةتكونم سيديات 6من على األغلب وهي : 2003وت نيت سي دي للد2 MSDN سي دي للمكتبة 3 وهو عبارة عن مكونات ما قبل البدايةComponent سي دي 1 .للتعامل مع قواعد البيانات)) إضافي (( SQL 2000 Server سي ي 1

:لنبدأ اآلن :) التنزيل عملية حسب المسار الذي إخترته في ( قم بتتبع التسلسل التالي

Start Program File Microsoft Visual Studio .NET 2003 Microsoft Visual Studio .NET 2003

:بعد أن تتبعت المسار ستظهر لك النافذة الرئيسية آالتالي

:الحظ معي وبالترتيب لكي تتعرف على واجهة البرنامج .وهو شريط العنوان والكل يعرفه – 1 في بناء المشروع في بيئة الدوت نيتبه أوامر للمساعدة شريط القوائم و– 2 ))2(( من شريط القوائم )) آثيرة اإلستعمال (( به أوامر مختصرة شريط اإلختصارات و– 3 :صفحة البداية وهي الصفحة الرئيسية لهذه البيئة وتتكون من – 4

OMS Jordan , Amman Tel : ( 00 962 79 6527425 ) [email protected]

Page 78: Learen C SHARP Fully

سادس عشرةالدرس ال الكامل في السي شارب

:وتتكون من التالي )) Projects )) 6 المشاريع - قمت بالعمل بهم مع التاريخ حيث )) 7رقم (( وتحتوي على آخر أربع مشاريع نافذة المشاريع-

)) .التعديل عليه (( يكتب التاريخ إما اليوم أو األمس أو تاريخ العمل به .على التوالي )) 13 )) (( 12(( أزرار إنشاء أو فتح مشاريع سابقة -

: Online Resourceنترنت المصادر من اإل-

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

:My Profile ملفك الشخصي -

:ى الواجهة بشكل عام أو إختصارات لوحة المفاتيح آالتالي هنا يمكنك التعديل عل : لو فتحت هذه النافذة لوجدت الشاشة آالتالي

6++ يمكنك إختيار أي إختصارات للغة قد تعودت عليها من قبل آالسي )) 3 (( وت نيتيمكنك تغيير الشكل العام أو اإلطار العام لبيئة الد )) 4 (( يمكنك أن تختار طريقة عرض المساعدة للغة قد تعودت عليها من قبل )) 5 ((

))2(( آل األرقام السابقة يمكن أن تعطيك ملف خاص آما في * .اإلختيار السادس هو إجراء حدث عند بداية تنفيذ بيئة الدوت نيت و

إذا إختفـت واحـدة مـا عليـك سـوى الـضغط علـى إسـمها شريط لعرض النوافذ الموجودة أمامك فـ - 5

.وستظهر لك حاال . النوافذ بتطبيقات لن نستعمله فهو خاص Console شريط األدوات ولكن في السي شارب – 9

.نافذة ملفاتك في مشروعك الذي تعمل عليه اآلن – 10

.المساعدة نافذة – 11

ذه ومعناها أخفي تلقائيا بمعنى أنه إذا ذهبت الماوس مـن في آل نافذة ستجد إشارة الدبوس ه – 14 .وإذا إقتربت منها قم بإظهارها تلقائيا . فوق تلك النافذة قم بإخفائها تلقائية

OMS Jordan , Amman Tel : ( 00 962 79 6527425 ) [email protected]

Page 79: Learen C SHARP Fully

سادس عشرةالدرس ال الكامل في السي شارب

) :1( مالحظة

O

Tools Option Environment General Display recently

من الـصورة الـسابقة يمكنـك زيـادة عـدد المـشاريع عـن أربعـة وذلـك بالمـسار )) 6(( في القسم رقم :التالي

:لصورة التالية في اامآ

.ثم قم بالنقر على موافق(( * )) فقم بزيادة العدد عند إشارة النجمة

) :2( مالحظة :إذهب إلى )) صفحة البداية (( لم تظهر لك نافذة البداية وإذا بدأت البيئة

Help Show Start Page

:Windows Applicationاآلن وبعد ما تعرفت على أقسام النافذة الرئيسية لنبدأ بمثالنا األول بالـ

. File New Projectإذهب اآلن إلى .Ctrl + Shift + Nأو قم بالضغط على

. من شريط اإلختصارات New Project أو قم بالنقر على زر المشروع الجديد :ظهر لك النافذة التالية إذا نجحت في ذلك ست

MS Jordan , Amman Tel : ( 00 962 79 6527425 ) [email protected]

Page 80: Learen C SHARP Fully

سادس عشرةالدرس ال الكامل في السي شارب

:لنقف قليال عند هذه النافذة لكي نبين أجزائها ستالحظ أسماء جميع اللغات المستعملة في بيئة الدوت نيت ))1 (( أنظر هنا في القسم– 1

. وبهذا تكون شرآة مايكروسوفت قد نجحت في تجميع جميع اللغات في إطار واحد وتطبيقات الكونسولالويندوزمثل تطبيقات التي يمكنك تصميمها )) القوالب (( تجد جميع األقسام – 2

)) .2(( وذلك في القسم )) Pocket PC (( وتطبيقات السمارت ديفايس . ))3(( بواسطة األزرار في القسم ))2(( يمكنك أن تصغر وتكبر األيقونات الموجودة في القسم – 3 )) .4(( بالضغط على ، وذلكح مشروع سي شارب إذن اآلن لنقم بفت– 4 هي أي برنامج سبق لك أن ، و Windows للـ تطبيقات هاوالحظ أن )) 5(( بالضغط على ذلك ثم بعد– 5

.إلخ... و أ اديق نصوصو صنأ إستعملته يحتوي على أزرار (( الملفات آلها بهذا اإلسم مية سيقوم بتسر أنه وتذآ )) 6(( يمكنك تسمية المشروع من الرقم – 6

)) .ملفات العمل وبإمكانك تحديد مكان معين بالضغط . Directoryتعرف أنها مكان منطقة العمل )) 7 (( من إسمها – 7

)) .8(( على الزر الذي يحمل الرقم .ة فقط سيفتح لك نافذة مساعدة عن هذه الصفح ))9(( إذا ضغط هذا المفتاح – 8 بإمكانك زيادة الخيارات المستخدمة عندك بإضافة عملك في مجلد جديد على المسار الذي حددته – 9

.Moreوالذي يحمل آلمة )) 10(( وذلك بالضغط على الرقم )) 7 (( في الخطوة رقم .لنبدأ مشروعنا اليوم )) موافق (( OK وأخيرا قم بعمل - 10

:يق السابق ستظهر معك النافذة التالية إذا نجحت في تطب

:أنظر إلى النافذة السابقة والحظ معي . Form1.csوسماها )) 1(( قام بفتح نافذة جديدة – 1

:يتكون اإلسم من قسمين آالتالي

OMS Jordan , Amman Tel : ( 00 962 79 6527425 ) [email protected]

وهذه تعتبر الكائن الرئيسي في المشروع ألنه سبق لنا أن قلنـا أننـا Form1القسم األول يحمل إسم أنه يجب أن يكون هنـاك علـى األقـل آـائن واحـد وألننا قلنا ، OOP للغة تدعم البرمجة الكائنية نسعى

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

Page 81: Learen C SHARP Fully

سادس عشرةالدرس ال الكامل في السي شارب

ة ـــ ظ أنه يوجد آلمــحوال، م اللغة ـــ أي إسC Sharp ومعناه csداد ــم اإلمتــوالقسم الثاني يحمل إس[ Design ] وهي داللة على أننا في وضع التصميم .

ماذا تالحظ ؟ )) 2(( في القسم – 2ل للغــة يــملــف لأليقونــة الناتجــة فــي المــشروع وملــف التحو. ملفــات فقــط 3المــشروع يحتــوي علــى

.وي على الكود الذي نقوم بكتابته األسمبلي والملف الثالث المحت :مالحظة سريعة هنا

؟ )) ماذا تالحظ (( غير السي شارب روعمشأي حاول فتح الخطـوة إسـتطاعت شـرآة مايكروسـوفت من خالل هـذه و أيضا ، ملفات 3 أنه يحتوي عل ستقول لي

.دوت نيت التوحيد أنماط جميع لغاتها ضمن باقة . Code Mode لك من نمط التصميم لنمط البرمجة ، أي الكود البحت هذه األيقونة لكي تنق– 3 . Design Mode لكي تعيدك لنمط التصميم – 4 ، وهي نافذة الخصائص Console Application نافذة جديدة لم تكن في تطبيقات الكونسول – 5

Propertyللكائن المختار في نمط التصميم Design Mode . ، وهي أي أداة نستعملها للتصميم مثل األزرار Component أو ال Objectأو نسميها ال دوات األ– 6

.إلخ ... أو صناديق النص أو اإلطارات فهي تقسيم من مايكروسوفت وضعت آل األدوات التي تخص موضوع Tabs تابات للمجموعات – 7

في تاب خاص فيها ، قواعد البيانات وضعته معين في تاب من هذه التابات ، فمثال آل شيء يخص .إلخ ... وضعته في تاب لوحده ) صفحات اإلنترنت ( وآل أدوات برمجة الويب

. وهي النافذة التي ستظهر عند تنفيذ البرنامح Form ساحة العمل والتصميم وتسمى النموذج – 8 :نأتي اآلن إلى منطقة العمل ونشرحها بالتفصيل ل -

:ةالنافذة التالي آما في الشكل السابق لتظهر لك 3بالضغط على الرقم قم

OMS Jordan , Amman Tel : ( 00 962 79 6527425 ) [email protected]

)) بعد الموضوع مباشرة المالحظةإقرأ ((

Page 82: Learen C SHARP Fully

سادس عشرةالدرس ال الكامل في السي شارب

ليدلك على أنك في قسم [ Design ] دون آلمة Form1.csحظ أنه قام بفتح صفحة خاصة وسماها ال .وليس التصميم Code Modeالبرمجة

: نستطيع إستنتاج التالي ;using System جملة )1( في السطر رقم

جميــع الكلمــات الموجــودة فــي منطقــة العمــل والتــي تحمــل اللــون األزرق هــي آلمــات محجــوزة * Keywordنستطيع إستعمالها آمتغيرات ال.

, Age, AGE, aGE ( يعنـي أن المتغيـرات Case Sensitiveتعتبر لغة الـسي شـارب لغـة حـساسة * AgE ( ة مستقلات متغيراآأنه وتعاملها هذه اللغة يشبه بعضها بعضاآلها متغيرات ال .

.سطر البر نهاية ت وهي تع;تحتوي على فاصلة منقوطة نهاية آل جملة *

للتعامــل مــع )) namespaceسـنتفق علــى تــسميتها (( ووظيفـة الــسطر األول هــي إســتدعاء مكتبــة في لغة السي include#خال واإلخراج وتعادل هذه الجملة بكلمة بشكل جيد مثل جمل اإلدمشروعال

والحظ أن أول حرف آبير وهذه المكتبة مختصة بالدوال الرئيسية التي Systemهنا إستدعى مكتبة الـ المـستخدمة فـي iostream.h تستخدم بكثرة آجمل اإلدخال واإلخراج وتعادل هذه المكتبة مكتبـة الــ

. ++لغة السي . لسطر السادس ، آلها مكتبات تساعدنا في تصميم تطبيقات الويندوز من السطر األول لضا وأي

:نستطيع إستنتاج التالي namespace WindowsApplication1 جملة )8( في السطر رقم . الذي نكتبه اآلن مشروعقام بإنشاء مكتبة تحتوي على ال* ووظيفته إخفاء تفاصيل الكـالس أو الدالـة ) -( شارة ناقص تالحظ أنه يوجد مربع صغير يحتوي على إ *

إذا حرآـت المـاوس ( ... ) المشار إليها وبعد الضغط عليه يظهر لنا مـستطيل يحتـوي علـى ثـالث نقـاط بمـستطيل أصـفر اللـون Tagعليه يعطيك محتوى الكالس أو الدالة المشار إليها آامال آشكل مالحظة

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

.آودها بنجاح

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

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

نغلقهـا والذي يـدل علـى بدايـة الدالـة أو الكـالس وطبعـا ) }( القوس المشهور )9( في السطر رقم

. ) 69( آما في السطر رقم ) {(بالمثل بإستخدام القوس المثيل

دعهـا جانبـا لـن تفيـدنا XMLيق ولكنها للغة الـ لجملة تع <summary> /// )10( في السطر رقم . الحظ أنها تحتوي على ثالث أقواس .األن في الوقت الحالي فلها وقتها

علـى العمـود وهـذا يعنـي بدايـة الجملـة األولـى فـي ) -( وجود إشارة الحظ )12( في السطر رقم .المعنية Functionالكالس أو الدالة

، Form1 وهـي تالحظ وجود إسم الكالس المستعملة في مشروعنا الحـالي )13( في السطر رقم

سـتخدام رمـز وذلـك بإ System.Windows.Forms.Formولكن الحـظ أننـا قمنـا بـالتوارث مـن المكتبـة وهـذا يمكننـا مـن إسـتخدام Formج أي أن الكالس الذي نستخدمه هـو عبـارة عـن نمـوذ ( : ) التوارث

.الكثير من الدوال الموجودة في المكتبة

الحظ الفـرق فـي الـسطر (( الحظ وجود قوسين هنا وهما لجمل التعليقات // )28( في السطر رقم . السطر تلكق على الجمل في ح أو تعلتوض، لها أي أنها جمل ال معنى )) . العاشر

تـسمى خاصـية )) مـربعين (( أي آلمة موجودة بـين قوسـين [STAThread] )63( في السطر رقم

Attribute وسنقوم بشرحها الحقا .

. هنا توجد الدالة الرئيسية لمشروعنا()static void Main )64( في السطر رقم

OMS Jordan , Amman Tel : ( 00 962 79 6527425 ) [email protected]

Page 83: Learen C SHARP Fully

سادس عشرةالدرس ال الكامل في السي شارب

*static void الدالة الرئيسية فهـي مـن نـوع تحديد نوعVoid التـي تعنـي أن الدالـة ال ترجـع أي . من النوع اإلستاتيكي Staticقيمة وهي من القسم

فـي دالـة معينـة بالنوع اإلسـتاتيكي لو أنك عرفت متغير ما : والنوع اإلستاتيكي يمكن شرحه آالتالي هتعديالت على هذا المتغير وخرجت من الدالـة فإنـ في داخل آالس معين ثم إستدعيت الدالة وأجريت

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

ستاتيكي وقمت في سطر تالي بزيادة هذا المتغير بقيمة واحد فإنه من النوع اإلInt من نوع Xالمتغير الـذي هـو جملـة ( آلما قمت بإسـتدعاء الدالـة سـينفذ الـسطر الثـاني فقـط ويقفـز عـن الـسطر األول

.دعه اآلن له وقت سنشرحه بالتفصيل . ألنه موجود في الذاآرة) التعريف *Main الحظ أن أول حرف آبير .

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

))MSDN تمتلك يجب أن (( لظهور نافذة المساعدة بالجملة التي تريد فقط F1قم بالضغط على

: مالحظة :إذا لم تحتوي منطقة العمل على أرقام فبإمكانك إضافتها بإتباع المسار التالي

Tools Option Text Editor C# General Line Numbers :آما في الصورة التالية

)) 1(( على الرقم قم بوضع

م وقـ يوالتـي تعنـي أنـه بعـد حـد معـين للـسطر )) Word Wrap )) 2ل خاصـية آذلك بإمكانك أن تفع . األفقي Scroll Barوبذلك أنت بغنى عن شريط الـ ، بإنزاله إلى سطر جديد

)) .4(( أيضا تستطيع إظهار معلومات أخرى عن هذه النافذة بالضغط على الرقم .OK )) 3(( إضغط الزر رقم اآلن إختر آما في النافذة السابقة و

.Windowsنكون هنا قد شرحنا آود البداية لملف السي شارب بطريقة الـ

OMS Jordan , Amman Tel : ( 00 962 79 6527425 ) [email protected]

Page 84: Learen C SHARP Fully

سادس عشرةالدرس ال الكامل في السي شارب

باإلنتقـال إلـى منطقـة التـصميم اآلن قـم ، معينـة وهو طباعة جملـة لنا اآلن سنقوم بكتابة أول برنامج :بواسطة الزر

: آما في الشكل التالي ، Double Click وذلك بالضغط المزدوج ..Button وقم بإدراج آائن الزر

: آما في الشكل التالي Form1 في النموذج Button1فتقوم اللغة بإدراج الزر

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

.بسهولة ووضعه في أي مكان تريده يمكنك تحريكه Button1بعد أن تقوم بإضافة الزر

التوسـيط الطـولي والعرضـي آمـا فـي م بإستخدام أدوات قولكي تضع الزر في وسط الشاشة تماما

:الشكل التالي

.والحظ ما يحدث .. قم بالضغط عليهما بالتوالي

: والزر آما في الصورة التالية Form1قم بتغيير أبعاد النموذج ثم

OMS Jordan , Amman Tel : ( 00 962 79 6527425 ) [email protected]

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

:آما في الشاشة التالي

Page 85: Learen C SHARP Fully

سادس عشرةالدرس ال الكامل في السي شارب

:لتصبح الشاشة آالتالي

:ك الكود التالي فيظهر لButton1ثم قم باإلنتقال إلى بيئة البرمجة وذلك بالضغط المزدوج على الزد

2 ولمـا وسـيطين Button1_Click وإسـمها Private الحظ أنـه قـام بإيجـاد دالـة مـن النـوع الخـاص -

Parameter . والحظ أنها تدل على حدث الضغط على زر الماوس. :قم بكتابة السطر التالي

ي أول ثالث حروف من الكلمة يعنmesقم بكتابة الكلمة : أنصحك بأن تستخدمه وهو جميلوهنا تكنيك : فتظهر لك قائمة آما في الشكل التالي Ctrl + Spaceثم قم بالضغط على

OMS Jordan , Amman Tel : ( 00 962 79 6527425 ) [email protected]

Page 86: Learen C SHARP Fully

سادس عشرةالدرس ال الكامل في السي شارب

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

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

أو قم بالضغط على األزرار Debug Start Without Debuggingفبعد آتابة الكود قم بالذهاب إلى F5: التالية ؟؟Start والـ Debugلماذا هذه مع أنه يوجد أوامر آثيرة مثل الـ : تتساءللعلك

:أنظر إلى الصورة التالية . سأقوم بتوضيح األمر لك

.Consoleال فرق بينهما أبدا خالف تطبيقات الكونسول : 2 و 1الرقم .EXE بإنشاء الملفات الالزمة للمشروع بما فيها الملف التنفيذي يقوم : 4الرقم .يقوم بحذف الملفات السابقة وإنشاء ملفات جديدة حسب التغيرات التي حدثت : 5الرقم

:الزر التالي أو يمكنك الضغط

: يظهر لك صندوق حوار آالتالي Button1وعندما تقوم بتنفيذ برنامجك والضغط على الزر

OMS Jordan , Amman Tel : ( 00 962 79 6527425 ) [email protected]

...لقد أنهيت التطبيق األول في تطبيقات الويندوز .... مبارك