You are on page 1of 331

‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫‪3‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫ممدمة للبرمجة‬
‫بالسي شارب‬

‫‪3‬‬
‫الكتاب ‪ :‬ممدمة للبرمجة بالسً شارب‬

‫المإلؾ ‪ :‬محمود سلٌمان‬

‫تصمٌم الؽالؾ ‪ :‬تمى عبدالحمٌد‬

‫الطبعة األولى ‪ :‬أبرٌل ‪ٕٓٔ2‬‬

‫رلم اإلٌداع ‪2018 / 8345 :‬‬

‫الترلٌم الدولً ‪978-977-805-066-0 :‬‬


‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫ممدمة للبرمجة‬
‫بالسي شارب‬

‫محمود سليمان‬

‫ٖ‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫ٗ‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫المحتوى ‪:‬‬

‫ٔ‪ -‬عن الكتاب ‪7 ........................................................................‬‬

‫ٕ‪ -‬ممدمة ‪2 ..............................................................................‬‬

‫ٖ‪ -‬إطار العمل ‪ٔٔ .......................................................................‬‬

‫ٗ‪ -‬بنٌة البرنامج فً السً شارب ‪ٔٙ ...................................................‬‬

‫‪ -7‬اإلدخال واإلخراج ‪ٕٔ ................................................................‬‬

‫‪ -2‬أنواع البٌانات ‪ٕٙ .....................................................................‬‬

‫‪ -9‬المتؽٌرات ‪ٕ9 .........................................................................‬‬

‫ٓٔ‪ -‬تحوٌل انواع البٌانات ‪ٖ9 ...........................................................‬‬

‫ٔٔ‪ -‬التعلٌمات ‪ٗٗ ........................................................................‬‬

‫ٕٔ‪ -‬المعامالت الرٌاضٌة والمنطمٌة ‪ٗٙ ................................................‬‬

‫ٖٔ‪ -‬ال ُجمل الشرطٌة ( ‪ٙٔ ........................... ) switch - if/else….else if‬‬

‫٘ٔ‪ -‬حلمات التكرار ( ‪77 ............. ) For / foreach / While / do….while‬‬

‫‪ -ٔ7‬المصفوفات ( ‪ٔٓٓ ....................................................... ) Arrays‬‬

‫‪ -ٔ2‬النصوص ( ‪ٕٔ7 ......................................................... ) Strings‬‬

‫‪ - ٔ9‬ممدمة فً البرمجة كائنٌة التوجه ( ‪ٖٔ٘ ................................... ) OOP‬‬

‫ٕٓ‪ -‬التؽلٌؾ ( ‪ٖٔ7 .................................................. ) Encapsulation‬‬

‫ٕٔ‪ٖٔٗ ............................................................. static members -‬‬

‫٘‬
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

ٔٗٙ ....................................... ) Methods or Functions ( ‫ الدوال‬-ٕٕ

ٔ7ٗ ........................... ) Recursion function ( ‫ الدالة ذاتٌة اإلستدعاء‬-ٕٖ

ٔ2ٓ ................................................. ( object , var , dynamic( -ٕٗ

ٔ27 ......................................................................... Classes -ٕ٘

ٕٓٔ ...................................................... ) set , get ( ‫ الخصائص‬-ٕٙ

ٕٓٗ ..................................................... ) Inheritance ( ‫ الوراثة‬-ٕ7

ٕٔٓ ...................................................................... interface -ٕ2

ٕٔٗ .............................................................. Polymorphism -ٕ9

ٕٔ9 ............................................... Abstract , Sealed , Partial -ٖٓ

ٕٕٙ .......................................................................... Struct -ٖٔ

ٕٖٓ .................................................................. Namespace -ٖٕ

ٕٖٗ ..................... ) Errors and Exceptions ( ‫ األخطاء واإلستثناءات‬-ٖٖ

ٕٖ9 ................................................................... Collections -ٖٗ

ٕ٘ٔ ...................................................................... Generics -ٖ٘

ٕ7ٖ ............................................................... Data Structure -ٖٙ

ٙ
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫عن الكتاب‬
‫هذا الكتاب ُم َع ّد للمبتدئٌن لكً ٌساعدهم على فهم أساسٌات لؽة السً شارب بطرٌمة‬
‫ّ‬
‫مبسطة وسهلة‪ ،‬وال ٌشترط أن ٌكون الماريء له أي معرفة مسبمة بالبرمجة‪ ،‬وأهم‬
‫خطوة بجانب المراءة هً التطبٌك العملً المستمر لتحصل على أكبر لدر من الفهم‬
‫واإلستٌعاب والتحصٌل‪.‬‬

‫عن اللغة‬
‫ت‬ ‫لؽة السً شارب لؽة بسٌطة جدا وسهلة وحدٌثة ولها أؼراض كثٌرة‪ ،‬فهً ُ‬
‫ط ّو ِر ْ‬
‫بواسطة شركة ماٌكروسوفت ( ‪ ) Microsoft‬بمٌادة أندرٌس هٌلسبرج‪ ،‬اللؽة ت ُم ِكنن من‬
‫عمل تطبٌمات للوٌب والهاتؾ وسطح المكتب‪ ،‬وتعمل شركة ماٌكروسوفت على‬
‫تطوٌرها دائما‪ ،‬وهً واحدة من أشهر لؽات البرمجة وأكثرهم إستخداما‪.‬‬

‫بدأوا فً تطوٌر اللؽة عام ‪ ، ٔ999‬وأطلموا علٌها لؽة كوول أي ‪:‬‬

‫‪COOL ----> C Object Oriented Language‬‬

‫ثم ؼٌروا االسم لسً شارب وأعلنوا عنها عام ٕٓٓٓ‪.‬‬

‫ولؽة سً شارب ( ‪ ) C#‬هً تطوٌر وإمتداد للؽة ‪ C++‬و ‪ ،C‬وهً تعمل بالبرمجة‬
‫كائنٌة التوجه بشكل كلً‪.‬‬

‫إذا اكتشفت أي خطؤ فً هذا الكتاب رجاء اعلمنً وراسلنً على البرٌد اإللكترونً‬

‫‪Mahmoudsoliman781@yahoo.com‬‬

‫‪7‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫ممدمة‬

‫إن سً شارب إحدى لؽات البرمجة المصممة للعمل على البنٌة التحتٌة المشتركة للؽات‬
‫البرمجة تسمى‬

‫) ‪( Common Language Infrastructure ) ( CLI‬‬

‫معنى هذا المصطلح أنها ت ُتٌح للمبرمج إمكانٌة إستخدامها إلنتاج مكتبات تتوافك مع‬
‫المواصفات والخصائص الشائعة للبنٌة التحتٌة أي انه ٌحتوي على الكود التنفٌذي الذي‬
‫ٌتٌح له استخدام شتى لؽات البرمجة عالٌة المستوى علً منصات عمل مختلفة‪.‬‬

‫التسلسل الهرمي للبيانات‬


‫‪ -Bits‬هً اصؽر وحدة لٌاس فً الكمبٌوتر وهً تؤخذ لٌمتٌن فمط إما ‪ 0‬أو ‪.1‬‬

‫ت ُع ِب ّر األصفار واآلحاد عن إشارات كهربائٌة‪ ،‬وهً ما ٌعمل بها الكمبٌوتر‪.‬‬

‫‪2‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫‪ - Characters‬وهً تتضمن الحروؾ وتساوي ٕباٌت حٌث الباٌت ٌساوي ‪ 2‬بت‬

‫ثم تتحول الحروؾ إلى أصفار وآحاد ( لؽة اآللة ) لكً ٌفمها الكمبٌوتر وٌتم ذلن بـ ‪:‬‬

‫)‪ASCII(American Standard Code for Information Interchange‬‬

‫فكل حرؾ من ( ‪ A‬إلى ‪ ) Z‬وكل رلم من ( ‪ 0‬إلى ‪ ) 9‬وكل رمز فً الكمبٌوتر مثل‬
‫& ^ ‪ @ # $‬له عدد عشري ٌناظره ثم ٌتحول إلى أصفار وآحاد فً النهاٌة لكً ٌفهمه‬
‫الكمبٌوتر ‪.‬‬

‫‪9‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫ٔ‪ -‬بت = ( ٔ \ ٓ )‬

‫ٕ‪ -‬باٌت = ‪ 2‬بت‬

‫ٖ‪ -‬كٌلو باٌت = ٕٗٓٔ باٌت‬

‫ٗ‪ -‬مٌجا باٌت = ٕٗٓٔ كٌلو باٌت‬

‫٘‪ -‬جٌجا باٌت = ٕٗٓٔ مٌجا باٌت‬

‫‪ -ٙ‬تٌرا باٌت = ٕٗٓٔ جٌجا باٌت‬

‫‪ -7‬بٌتا باٌت = ٕٗٓٔ تٌرا باٌت‬

‫‪ -2‬إكسا باٌت = ٕٗٓٔ بٌتا باٌت‬

‫‪ -9‬زٌتا باٌت = ٕٗٓٔ إكسا باٌت‬

‫ٓٔ‪ٌ -‬وتا باٌت = ٕٗٓٔ زٌتا باٌت‬

‫‪ ( Fields‬حمول ) ‪ -‬تتكون من حروؾ او أرلام فمثال ت ُعبِ ّرعن اسم الشخص أو عمره‪.‬‬

‫‪ ( Records‬سجل ) ‪ٌ -‬حتوي على مجموعة من الحمول معا‪.‬‬

‫‪ ( Files‬ملفات ) ‪ -‬تتكون من مجموعة من السجالت‪.‬‬

‫‪ ( Database‬لواعد البٌانات ) ‪ -‬عبارة عن مجموعة من البٌانات ولد تكون بٌانات‬


‫ضخمة لكن ٌسهل الوصول إلٌها والتعامل معها بسرعة وتتكون من حمول وسجالت‬
‫وهذه البٌانات ت ُخزَ ن فً جداول بسٌطة لها اسم وخصائص‪.‬‬

‫‪ ( Big Data‬بٌانات ضخمة ) ‪ -‬كم هائل من البٌانات التً ت ُنت َج فً العالم ٌومٌا‪.‬‬

‫ٓٔ‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫إطار العمل‬
‫( ‪) The .Net Framework‬‬

‫الـ ( دوت نت ) ‪ .Net‬هً إطار عمل أو منصة لتنفٌذ التطبٌمات وتحتوي على مكتبات‬
‫توفر العدٌد من االمكانٌات التً تستخدم لبناء تطبٌمات كبٌرة بالسً شارب سواء‬
‫تطبٌمات للوٌب أو لسطح المكتب أو الهاتؾ سواء ( ‪windows ، ios ، android‬‬
‫‪ ) phone‬وذلن من خالل ‪ xamarin‬وهً عبارة عن منصة لتطوٌر تطبٌمات‬
‫الهواتؾ المحمولة حٌث ٌعمل التطبٌك الذي أُنشًء بواسطتها على كل أنظمة تشؽٌل‬
‫ص ِم َمت لتكون منصة عمل لمختلؾ التطبٌمات‪ ،‬تستطٌع إستخدامها‬ ‫الهواتؾ‪ ،‬الـ ‪ُ .Net‬‬
‫فً بناء تطبٌمات من خالل اللؽات اآلتٌة ‪:‬‬

‫‪C# , C++ , Visual Basic , Python and JavaScript‬‬

‫وهً تحتوي على كل المكتبات المبنٌة فً هذه اللؽات وبها كل الموارد التً تمكنن من‬
‫إنشاء تطبٌك من خاللها‪.‬‬

‫محتوٌات إطار عمل ( ‪: ).Net‬‬

‫‪ - (Common Language Runtime) CLR‬هً عبارة عن آلة إفتراضٌة مسئولة‬


‫عن إدارة الكود مع الذاكرة المإلتة ( ‪ ) RAM‬والمعالج ( ‪ ) processor‬ت ُح ِول الكود‬
‫إلى لؽة اآللة‪ ،‬بعدها هذا الكود ٌستطٌع العمل على أي لؽة برمجة اخرى‪ ،‬وهو ٌدٌر‬
‫الذاكرة أٌضا وٌعالج بها االخطاء وٌحتوي على " جامع النفاٌات "‪.‬‬

‫‪ٌ - (Garbage Collector) GC‬جمع البٌانات المهملة واالماكن الؽٌر مستخدمة فً‬
‫الذاكرة وٌموم بحذفها وتنمٌة الذاكرة فٌجعلها تعمل بكفاءة أكثر‪.‬‬

‫ٔٔ‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫رحلة الكود البرمجً داخل الـ ‪: .Net‬‬

‫أوال ٌُعالج الكود فٌتحول إلى لؽة وسٌطة‬

‫( ‪) MSILMicrosoft Intermediate Language‬‬

‫ألن السً شارب من اللؽات عالٌة المستوى فتحتاج إلى لؽة وسٌطة لبل أن تتحول إلى‬
‫لؽة اآللة‪.‬‬

‫ضعت فً البرنامج التنفٌذي ( الملؾ الذي‬


‫مالحظة ‪ :‬مكونات تطبٌمات اللؽة الوسٌطة ُو ِ‬
‫ٌُن ِفذه الكمبٌوتر فً نهاٌة المهام )‪.‬‬

‫ثانٌا عندما ٌُنَفَذ البرنامج‪ٌ ،‬مر على معالج اخر ٌُعرؾ بــ ‪ ( JIT ) just-in-time‬وهذا‬
‫أٌضا ٌكون بداخل ‪CLR‬‬

‫وٌعمل على ترجمة اللؽة الوسٌطة فً الملؾ التنفٌذي إلى لؽة اآللة (‪.)0 , 1‬‬

‫مالحظة ‪:‬‬

‫أي أمر ٌؤخده الكمبٌوتر ٌتحول إلى اللؽة التً ٌفهمها الكمبٌوتر وٌستطٌع التعامل معها‬
‫وهو ال ٌفهم ؼٌرها وهً (‪ )0 , 1‬أي شًء ٌتحول إلى األصفار واآلحاد‪.‬‬

‫ٕٔ‬
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

C# Source Code

C# Compiler

MSIL (.exe or .dll)

CLR / GC / JIT

Operating System

: ‫ ) تسمى‬.Net ( ‫وتوجد أٌضا أداة داخل إطار عمل الـ‬

CTS (Common Type System)

ٖٔ
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫وهً جزء من الـ ‪ CLR‬وهً عبارة عن آداة تستطٌع تشؽٌل اكثر من لؽة برمجة معا‬
‫بمكتبات مختلفة‪.‬‬

‫وتحتفظ باالساسٌات بداخلها وعندما تعمل أى لؽة تعود هذه اآلداة لتلن االساسٌات‬
‫الخاصة بهذه اللؽة لكً تعمل على إطار العمل حٌث أن كل لؽة برمجة ٌكون لها لواعد‬
‫خاصة بها فً الكتابة وٌكون لكل لؽة العدٌد من المكتبات التً تحتوي على تعرٌؾ لكل‬
‫شئ خاص باللؽة‪.‬‬

‫‪https://msdn.microsoft.com/ar-sa/library/‬‬

‫إن لم تستطع فهم هذه المعلومات فال بؤس‪ ،‬ستفهمها فٌما بعد‪ ،‬فمحتوى الكتاب ؼٌر‬
‫معتمد علٌها‪ ،‬لكنً تعم ّدت لولها لكً تعرؾ كٌؾ ٌعمل البرنامج الذي تكتب علٌه الكود‬
‫وماذا ٌحدث مع الكود الذي تكتبه وما ٌحدث وراء الشاشة وكٌؾ ٌفهمه الكمبٌوتر‬
‫وٌظهر على شكل برنامج له واجهه وٌستطٌع المستخدم العادي التعامل معه‪ ،‬سنبدأ فً‬
‫بناء هٌكل أول برنامج فً لؽة السً شارب ‪.‬‬

‫إذا أٌن ٌكت َب الكود؟‬

‫ٌمكننا كتابة الكود على أي محرر نصوص وٌكون إمتداد الملؾ الذي نكتب به الكود‬

‫( ‪) .cs‬‬

‫أو على بٌئة تطوٌر متكاملة ) ‪IDE ( Integrated Development Environment‬‬

‫وهذه البٌئة ( ‪ ) visual studio‬هً المعتمدة من شركة ماٌكروسوفت فً التطوٌر‪.‬‬

‫ٌمكنن أن ت ُ ِ‬
‫حم َل أي إصدار منه‪.‬‬

‫بعد تحمٌل البرنامج وتثبٌته على جهازن ‪...‬‬

‫اوال نفتح برنامج ‪ visual studio‬من لائمة ‪Start‬‬

‫ٗٔ‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫ثم نضؽط على ‪ File‬بعدها ندخل إلى ‪ New‬ثم نختار ‪project‬‬

‫بعدها نختار لؽة ‪ C#‬ثم ‪Console Application‬‬

‫٘ٔ‬
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

‫سٌفتح أمامن‬

using System;
namespace + ‫اسم البرنامج‬
First_project ‫فمثال إذا اسمٌت البرنامج‬
:ً‫سٌكون كالتال‬
namespace First_project
{
Class Program
{
static void Main(string[] agrs)
{
Console.WriteLine("Hello World");
}
}
}

ٔٙ
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫بعد اإلنتهاء من كتابة الكود سنضؽط على كلمة ‪ Start‬لكً نموم بمعالجة للكود و‬
‫تنفٌذه‪.‬‬

‫أو ٌمكننا الضؽط على ) ‪( ctrl+f5‬‬

‫مالحظة ‪ :‬بعض إصدارات برنامج ‪ visual studio‬تفتح الشاشة السوداء‬


‫(‪ )Console‬وتغلك بسرعة لبل رؤية نتيجة الكود‪،‬‬

‫يمكنن أن تثبت الشاشة عن اإلغالق بكتابة ( ; ) (‪) Console.ReadKey‬‬

‫أو ( ; ) (‪) Console.ReadLine‬‬

‫وتُكت َب هذه الجملة فً آخر سطر فً الكود فً دالة الـ ) (‪... Main‬‬

‫‪namespace First_project‬‬
‫{‬
‫‪Class Program‬‬
‫{‬
‫)‪static void Main(string[] agrs‬‬
‫{‬
‫;)"‪Console.WriteLine("Hello World‬‬
‫;) (‪Console.ReadKey‬‬
‫}‬
‫}‬
‫}‬

‫لكً نفهم هذا البرنامج ٌجب أن نحلله أوال‪.‬‬

‫ما معنً هذه الكلمات‪...‬؟‬

‫) ‪) using , namespace , class , Main‬‬

‫‪ٔ7‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫اتفمنا فً البداٌة على أن لؽة السً شارب ( ‪ ) C#‬إنما هً مبنٌة على اللؽتٌن ‪ C++‬و ‪C‬‬
‫وتعمل بشكل كلً بالبرمجة كائنٌة التوجه‪.‬‬

‫إذا ما معنى البرمجة كائنٌة التوجه؟ وماهو إختالؾ السً شارب عن السً؟ وما هً‬
‫تمنٌات البرمجة؟‬

‫لنتعرؾ على تمنٌات البرمجة اوال ‪:‬‬

‫ٔ‪ -‬البرمجة الخطية ( ‪) Linear Programming‬‬

‫وهً كانت عبارة عن أن الكود ٌُكتب فً صفحة واحدة وبعض االجزاء فً الكود لابلة‬
‫للتكرار بدون شئ ٌجعلنا نستؽنً عن هذا التكرار فً جزء معٌن من الكود‪ ،‬فمثال أنن‬
‫تكتب بعض االسطر من الكود لتنفٌذ عملٌة معٌنة ثم تُكمل الكود وبعدها تمابلن مشكلة‬
‫تحتاج إلى نفس العملٌة السابمة لكن فً جزء مختلؾ من البرنامج‪ ،‬حٌنها ال تستطٌع إال‬
‫أن تعٌد كتابة هذا الجزء مرة أخرى‪ ،‬وأٌضا عملٌة البحث عن االخطاء كانت صعبة‬
‫جدا وتؤخذ الكثٌر من الولت‪ ،‬كود ٌحتوي على آالؾ االسطر فلم ٌكن من السهل التعامل‬
‫مع الكود فً عملٌات التعدٌل وكان الكود ؼٌر مرتب‪ُ ،‬و ِج َدت فكرة البرمجة الخطٌة‬
‫لحل المشاكل المتعلمة بالرٌاضٌات ولتسهٌل حلها‪.‬‬

‫ٕ‪ -‬البرمجة الهيكلية ) ‪( Structure Programming‬‬

‫ظهر بعض التطوٌر فً هذه الولت واخترعوا الدوال أو الوظائؾ ( ‪) Functions‬‬


‫وهً ت ُم ِكنن من كتابة (عملٌة معٌنة ) عدد من األسطر مرة واحدة وتستدعٌهم فً كل‬
‫مره احتجت إلٌهم دون الحاجة إلى إعادة كتابة هذه االسطر( العملٌة )‪ ،‬فمط نكتب اسم‬
‫الدالة‪ ،‬لكن أٌضا ُو ِج َد بعض التمصٌر فٌها‪ ،‬حٌث ٌصعب فصل البٌانات عن العملٌات‪،‬‬
‫وال توجد حماٌة للبٌانات من حدوث األخطاء‪ ،‬والتعدٌل بها ٌنتج عنه أخطاء فً أجزاء‬
‫أخرى من الكود‪ ،‬ومن اللؽات التً تعمل بالبرمجة الهٌكلٌة لؽة ‪.C‬‬

‫‪ٔ2‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫ٖ‪ -‬البرمجة كائنية التوجه ) ‪( Object Oriented Programming‬‬

‫وأخٌرا ظهرت تمنٌة جدٌدة فً كتابة الكود ت ُم ِكنَن من تنظٌم الكود وأختصرت جدا فً‬
‫حجم الكود وأصبح مرتبا وسه ّل عملٌات البحث عن األخطاء وساعد المطورٌن على‬
‫العمل بؤرٌحٌة ووفرت الكثٌر من الولت والجهد أٌضا‪ ،‬وأصبح كل شًء منفصال عن‬
‫اآلخر حٌث تتم عملٌة التعدٌل والتؽٌٌر فً الكود بدون حدوث أخطاء مترتبة على هذا‬
‫التؽٌٌر‪ ،‬وأُضٌفت الكثٌر من التمنٌات التً تحافظ على البٌانات وتؽلٌفها وإخفاء البٌانات‬
‫والتحكم الكامل بها‪ ،‬ومن اللؽات التً تعمل بالبرمجة كائنٌة التوجه (البرمجة الشٌئٌة)‬
‫لؽة ‪ C++‬و ‪ C#‬و ‪ Java‬و ‪ Python‬ومعظم لؽات البرمجة الحدٌثة‪.‬‬

‫‪Namespace‬‬

‫لنتخٌل أننا كتبنا مجموعة من األسطر البرمجٌة فً دالة ( ‪ ،) Function‬وأنشؤنا أكثر‬


‫من دالة‪ ،‬إذا تحتاج إلى شًء ٌدٌر هذه الدوال معا‪ ،‬اسمه ‪.class‬‬

‫ال تشؽل تفكٌرن بمعنى كلمة ‪ ،class‬سنفهمه فٌما بعد‪ ،‬كل ما أرٌدن أن تعرفه عن الـ‬
‫‪ class‬أنه ٌمكن أن ٌحتوي على أكثر من دالة وٌمكن إنشاء أكثر من ‪ class‬فً نفس‬
‫المشروع‪ ،‬إذا نحتاج إلى شئ لٌجمع كل هذه الـ ‪ classes‬مع بعضها‪ ،‬سنضعهم بداخل‬
‫‪ Namespace‬فٌكون الكود مرتب أكثر‪.‬‬

‫إذا فالـ ( ‪) namespace‬هً عبارة عن حاوٌة لمجموعة من الـ ‪ ،classes‬وٌمكن أن‬


‫ٌحتوي المشروع على أكثر من ‪.namespace‬‬

‫ولنستطٌع رإٌة وإستخدام الـ ‪ classes‬التً بداخل الـ ‪namespace‬‬

‫ٌجب أن نستدعً الـ ‪ namespace‬بإستخدام كلمة ‪. using‬‬

‫‪ٔ9‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫‪Main‬‬

‫تسمى الدالة األساسٌة التً ٌبدأ منها البرنامج فً تنفٌذ الكود‪ ،‬فمثال إذا كتبت مئات‬
‫العملٌات واإلجراءات خارج الدالة االساسٌة فلن ٌتم تنفٌذهم أوال بل ٌبدأ البرنامج فً‬
‫تنفٌذ ما بداخل الدالة األساسٌة‪.‬‬

‫)‪static void Main(string[ ] agrs‬‬


‫{‬
‫; )" ‪Console.WriteLine(" C#‬‬
‫}‬

‫سنفهم معنى كلمة ‪ string[ ] args‬فً الفصل الخاص بالدوال‪ٌُ ،‬مكن اإلستؽناء عنها‬
‫فً دالة الـ ‪ ،Main‬نستطٌع كتابة ألواس الدالة بدون كتابتها‪.‬‬

‫تكون بالشكل التالً ‪:‬‬

‫) (‪static void Main‬‬


‫{‬
‫; )" ‪Console.WriteLine(" C#‬‬
‫}‬

‫ٕٓ‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫اإلدخال واإلخراج‬
‫( ‪) Input and Output‬‬

‫عملٌات اإلدخال واإلخراج هً التً تُم ِك ّن المستخدم من التعامل مع البرنامج أو‬


‫دخل‬‫التطبٌك‪ ،‬على سبٌل المثال إذا كنت من مستخدمً مولع الفٌس بون فإنن أوال ت ُ ِ‬
‫البرٌد اإللكترونً وكلمة المرور فهذه تُعَد عملٌة إدخال لن ك ُمستخدم للمولع‪ ،‬والبٌانات‬
‫التً تظهر فٌما بعد فهذه عملٌة إخراج‪.‬‬

‫; ‪using System‬‬
‫‪namespace First_project‬‬
‫{‬
‫‪Class Program‬‬
‫{‬
‫)‪static void Main(string[ ] agrs‬‬
‫{‬
‫;) (‪Console.ReadLine‬‬
‫}‬
‫}‬
‫}‬

‫كلمة ‪ Console‬عبارة عن ‪ class‬بداخل )‪Namespace (System‬‬

‫) (‪ -ReadLine‬عبارة عن دالة ت ُستخدم لعملٌات اإلدخال وتستمبل نصوص فمط‪.‬‬

‫ٕٔ‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫وٌجب ان نضع فاصلة منموطة فً نهاٌة كل جملة فً البرنامج ( ; ) وإال سٌحدث خطؤ‪.‬‬

‫أنواع األخطاء فً الكود ‪:‬‬

‫ٔ‪ -‬خطؤ فً طرٌمة كتابة الكود ( ‪ ) Syntax error‬وذلن ٌكون خطؤ فً لواعد‬
‫كتابة الكود‪.‬‬
‫ٕ‪ -‬خطؤ منطمً ( ‪ ) Logic error‬وفً هذه الحالة ٌكون الكود مكتوب بطرٌمة‬
‫صحٌحة كماعدة ولكنه ؼٌر منطمً مثل لسمة واحد على صفر‪.‬‬
‫ٖ‪ -‬خطؤ أثناء التشؽٌل ( ‪ ) Runtime error‬هذا الخطؤ ٌحدث أثناء تشؽٌل‬
‫البرنامج‪ ،‬مثل وجود فائض فً البٌانات ال ُمد َخلَة‪.‬‬

‫نسٌان الفاصلة المنموطة ٌُعد خطؤ فً طرٌمة الكتابة أي ( ‪.) Syntax error‬‬

‫; ‪using System‬‬
‫‪namespace First_project‬‬
‫{‬
‫‪Class Program‬‬
‫{‬
‫)‪static void Main(string[ ] agrs‬‬
‫{‬
‫; )" ‪Console.WriteLine(" C#‬‬
‫}‬
‫}‬
‫}‬

‫) (‪ - WriteLine‬هً دالة لطباعة المخرجات‬

‫‪ - Line‬تُكتب لكً ٌُنهً السطر الحالً وٌبدأ فً سطر جدٌد‪.‬‬

‫ٕٕ‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫وٌمكن أن نكتب فمط ) (‪ Write‬لكن األسطر التً تلٌها فً عملٌة الطباعة ستكون‬
‫متالصمة بها‪.‬‬

‫وٌوجد طرٌمتان للطباعة ‪:‬‬

‫‪) Placeholder ) -1‬‬


‫وتكون كالتالً ‪:‬‬

‫; ) ‪Console.WriteLine(" Hello World ,0- " , 5 , 20‬‬

‫وفً هذه الحالة سٌطبع ‪ + Hello World‬أول ُمد َخل للدالة بعد الفاصلة‬

‫وهً المٌمة ( ‪) 5‬‬

‫وإذا أردنا طباعة ثانً ُمدخل سنكتب ‪ ,1-‬وحٌنها لن ٌعرض أول ُمدخل وسٌعرض‬
‫المٌمة ‪20‬‬

‫حٌث أن أول ترلٌم ( ‪ٌ ) index‬بدأ بالمٌمة صفر ‪., 0 -‬‬

‫وٌُمكنن أن تطبع أي شًء بالشكل الذي ترٌده فمثال ‪:‬‬


‫; ) ‪Console.WriteLine(" My Name is ,0- and my age is ,1-" , " Ali " , 50‬‬

‫فً هذه الحالة سٌطبع‬

‫‪My Name is Ali and my age is 50‬‬

‫مثال ٕ ‪:‬‬
‫; ) ‪Console.WriteLine(" x = ,2} , y = {0} and z = ,1- " , 10 , 20 , 30‬‬

‫سٌطبع‬

‫‪x = 30 , y = 10 and z = 20‬‬

‫ٖٕ‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫‪ ) Concatinatoin( -2‬الدمج‬

‫;)‪Console.WriteLine(" Hello World " + 5 +20‬‬

‫لكن هذه الطرٌمة ثابتة وماهو مكتوب أوال سٌعرض أوال بعكس الطرٌمة السابمة انت من‬
‫ٌتحكم فٌما سٌظهر أوال وسٌعرض الكل ‪.‬‬

‫سٌكون الناتج‪....‬‬
‫‪Hello World 520‬‬

‫سٌعرضها بهذا الشكل ولن ٌجمع الرلمٌن فهذه األداة (‪ )+‬بعد النص فً الطباعة لٌس‬
‫أداة جمع إنما هً أداة للدمج بٌن النصوص فهو ٌتعامل مع األرلام التً بعد النص على‬
‫أنها نص ولٌست رلم فمنطمٌا ال ٌمكن إضافة رلم على نص‪ ،‬لكن إذا أتى الرلمان لبل‬
‫جملة الطباعة فسٌجمع الرلمٌن أوال وٌموم بالعملٌة الحسابٌة بطرٌمة عادٌة جدا‪.‬‬

‫; ) "‪Console.WriteLine( 5 + 20 + "Hello World‬‬

‫سٌطبع ‪25Hello World :‬‬

‫وعندما ننتهً من الكود ونرٌد تشؽٌل البرنامج نضؽط ‪.Ctrl+F5‬‬

‫توجد بعض العالمات تسمى " ‪ " Escape Sequence‬التً لد تساعدن فً عملٌة‬
‫الطباعة لتخرج النص بشكل منسك أو إنذار عند عملٌة ما خطؤ‪.‬‬

‫لطباعة عالمة تنصٌص فردٌة‬ ‫'\‬


‫لطباعة عالمة تنصٌص زوجٌة‬ ‫"\‬
‫لطباعة عالمة \‬ ‫\\‬
‫لعمل إنذار‬ ‫‪\a‬‬
‫للنزول إلى سطر جدٌد‬ ‫‪\n‬‬
‫لعمل ‪ ( tab‬مسافات فارؼة )‬ ‫‪\t‬‬

‫ٕٗ‬
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

: ‫مثال‬

Console.WriteLine(" \' Hello " ) ;

Console.WriteLine(" \" Hello " ) ;

Console.WriteLine(" \\ Hello " ) ;

Console.WriteLine(" \a Hello " ) ;

Console.WriteLine(" \n Hello " ) ;

Console.WriteLine(" \t Hello " ) ;

ٕ٘
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫أنواع البيانات‬
‫( ‪) Data Types‬‬

‫البٌانات التً ت ُخزن فً الذاكرة ٌجب أن ٌكون لها نوع حتً ٌتعرؾ علٌها مترجم اللؽة‪،‬‬
‫فمثال تكون نصوص أو حرؾ أو عدد صحٌح أو عدد عشري وٌجب أن نحدد نوعها‬
‫أوال وإال لن ٌتعرؾ علٌها المترجم وسٌحدث خطؤ‪ٌ ،‬وجد العدٌد من االنواع ولكن‬
‫بالتؤكٌد لن تسخدم كل شًء‪ ،‬فمط ما تحتاج إلٌه فً برنامجن‪...‬‬

‫الوصف‬ ‫الحجم‬ ‫النوع الموافق في‬ ‫نوع البيانات‬


‫منصة الدوت نث‬

‫قٍمح منطقٍح صح‬ ‫‪ true‬أو ‪false‬‬ ‫‪System.Boolean‬‬ ‫‪bool‬‬


‫أو خطأ‬
‫رقم صحٍح‬ ‫من – ‪ 821‬انً ‪821‬‬ ‫‪System.Sbyte‬‬ ‫‪sbyte‬‬
‫موجة أوسانة‬
‫مساحته ‪ 1‬تت‬
‫رقم صحٍح‬ ‫‪ 0‬انى ‪222‬‬ ‫‪System.Byte‬‬ ‫‪byte‬‬
‫موجة مساحته ‪1‬‬
‫تت‬
‫رقم صحٍح سانة‬ ‫–‪ 827121‬انى ‪827121‬‬ ‫‪System.Int16‬‬ ‫‪short‬‬
‫أو موجة‬
‫مساحته ‪ 82‬تت‬
‫رقم صحٍح‬ ‫‪ 0‬انى ‪227282‬‬ ‫‪System.UInt16‬‬ ‫‪ushort‬‬
‫موجة مساحته‬
‫‪ 82‬تت‬

‫‪ٕٙ‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫رقم صحٍح سانة‬ ‫–‪ 278,17,1872,1‬انى‬ ‫‪System.Int32‬‬ ‫‪int‬‬


‫أو موجة‬ ‫‪278,17,1872,1‬‬
‫مساحته ‪ 82‬تت‬

‫رقم صحٍح‬ ‫‪ 0‬انى‪,72,,7,2172,2‬‬ ‫‪System.UInt32‬‬ ‫‪uint‬‬


‫موجة مساحته‬
‫‪ 82‬تت‬
‫رقم صحٍح‬ ‫–‬ ‫‪System.Int64‬‬ ‫‪long‬‬
‫موجة أوسانة‬ ‫‪,722878127082712,7112710‬‬
‫مساحته ‪ 2,‬تت‬ ‫‪1‬‬
‫انى‬
‫‪,722878127082712,7112710‬‬
‫‪1‬‬

‫رقم صحٍح‬ ‫‪0‬‬ ‫‪System.UInt64‬‬ ‫‪ulong‬‬


‫موجة مساحته‬ ‫انى‬
‫‪ 2,‬تت‬ ‫‪,817,,271,,7018710,7228‬‬
‫‪282‬‬
‫ٌقثم حزف‬ ‫‪U+0000‬‬ ‫‪System.Char‬‬ ‫‪char‬‬
‫مساحته ‪ 82‬تت‬ ‫انى‬
‫‪U+ffff‬‬
‫ٌقثم رقم كسزي‬ ‫‪0‬‬ ‫‪System.Single‬‬ ‫‪float‬‬
‫مساحته ‪ 82‬تت‬ ‫انى‬
‫‪1.844674407370955e+16‬‬
‫ٌقثم رقم كسزي‬ ‫–‪E+38 82,02128‬‬ ‫‪System.Double‬‬ ‫‪double‬‬
‫مساحته ‪ 2,‬تت‬ ‫انى‬
‫‪3.402823E+38‬‬
‫ٌقثم رقم سانة أو‬ ‫–‬ ‫‪System.Decima‬‬ ‫‪decimal‬‬
‫موجة مساحته‬ ‫‪E+308 821,12,888,12282‬‬ ‫‪l‬‬
‫‪ 821‬تت‬ ‫انى‬
‫‪E+308821,12,888,12282‬‬
‫ٌمثم سهسهح نصٍح‬ ‫مقٍد تحسة انذاكزج‬ ‫‪System.String‬‬ ‫‪string‬‬
‫من جدول‬
‫انٍونكود‬
‫ٌقثم أي نوع من األنواع انساتقح‬ ‫‪System.Object‬‬ ‫‪object‬‬

‫‪ٕ7‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫إذا مما تتكون البٌانات التً ت ُخزن فً الذاكرة؟‬

‫تتكون من ( نوع البٌانات ‪ +‬المتؽٌر الذي ٌحتوي على البٌانات ‪ +‬المٌمة )‬

‫‪Data type + variable + value‬‬

‫‪ٕ2‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫المتغيرات‬
‫( ‪) Variables‬‬

‫المتؽٌر هو عبارة عن اسم لمكان تخزٌن البٌانات فً الذاكرة‪ ،‬والذاكرة عبارة عن خالٌا‬
‫وكل خلٌة تُعادل ٔ بت‪ ،‬وت ُ َح َدد المساحة التً تؤخذها البٌانات فً الذاكرة من خالل‬
‫نوعها وتتؽٌر لٌمة المتؽٌر بإستمرار كلما أدخلنا له لٌمة جدٌدة‪ ،‬كما ٌمكننا تسمٌة‬
‫المتؽٌر بؤي اسم نرٌده لكن ال نستطٌع تسمٌة متؽٌرٌن بنفس األسم‪ ،‬وٌجب أن تكون‬
‫المٌمة التً ستُخزَ ن تتناسب مع نوع المتؽٌر‪.‬‬

‫تتم عملٌة تعرٌؾ المتؽٌر بهذا الشكل ‪:‬‬

‫المٌمة = اسم المتؽٌر ‪ +‬نوع البٌانات التً تخزن فً المتؽٌر‬

‫; ‪Data type Variable_Name = value‬‬

‫‪Variable_Name‬‬

‫‪D‬‬ ‫‪a‬‬ ‫‪t‬‬ ‫‪a‬‬

‫ونُسمً هذا المكان فً الذاكرة لكً نستطٌع الوصول إلى البٌانات مرة أخرى بسهولة‪،‬‬
‫فهو بمثابة صندوق توضع به هذه البٌانات ‪.‬‬

‫‪ٕ9‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫;‪using System‬‬
‫‪namespace First_program‬‬
‫{‬
‫‪class Program‬‬
‫{‬
‫) (‪static void Main‬‬
‫{‬
‫;‪int num = 5‬‬
‫;"‪string name = "123Mahmoud‬‬
‫;‪float num2 = 34.5f‬‬
‫;'‪char c = 'a‬‬
‫;‪double num3 = 34.5‬‬
‫}‬
‫}‬
‫}‬

‫فً هذا المثال عرفّنا متؽٌر من النوع ( ‪ ) int‬ووضعنا به المٌمة ‪5‬‬

‫ومتؽٌر من النوع ( ‪ ) string‬ووضعنا به نص داخل عالمتٌن تنصٌص وٌجب أن‬


‫ٌوضع النص أو الكلمة بٌن عالمتٌن تنصٌص‪ ،‬حتى إذا كانت المٌمة عبارة عن أرلام‬
‫لكنها بداخل عالمتٌن تنصٌص فإنه ٌتعامل معها على أنها نص ولٌست أرلام‪.‬‬

‫ومتؽٌر من النوع ( ‪ ) float‬رلم ٌحتوي على عالمة عشرٌة ونكتب فً آخره ( ‪ ) f‬لكً‬
‫ٌتعرؾ المترجم على أنه ‪ ،float‬ألن المٌمة االفتراضٌة لألعداد الكسرٌة هً ‪.double‬‬

‫ثم عرفنا متؽٌر من النوع ( ‪ٌ ) char‬ؤخذ حرؾ وٌوضع بٌن عالمة تنصٌص فردٌة‪.‬‬

‫ساسة من ناحٌة الحروؾ أي أن ‪ A‬ال تساوي ‪a‬‬


‫ٌجب أن نعلم أن لؽة السً شارب ح ّ‬

‫فٌجب أن ننتبه عند الكتابة‪.‬‬

‫‪ : Int ‬خطؤ‬
‫‪ : int ‬صح‬

‫ٖٓ‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫فمثال إذا كان ‪:‬‬

‫;‪int a=7‬‬
‫;‪int A =7‬‬

‫فإنهما فً هذه الحالة متؽٌران مختلفان‪ ،‬وٌجب مراعاة الدلة فً كتابة نوع المتؽٌر‬
‫والتعامل معه بشكل صحٌح وإال سٌحدث خطؤ فً البرنامج ولن ٌتعرؾ على نوع‬
‫المتؽٌر‪.‬‬
‫;‪using System‬‬
‫‪namespace First_program‬‬
‫{‬
‫‪class Program‬‬
‫{‬
‫) (‪static void Main‬‬
‫{‬
‫; ‪int num1=5‬‬
‫; ‪int num2=10‬‬
‫; ‪int sum‬‬
‫; ‪sum = num1 + num2‬‬
‫" = ‪Console.WriteLine("sum of two numbers‬‬
‫;)‪+sum‬‬
‫}‬
‫}‬
‫}‬

‫وإذا كنت ترٌد تعرٌؾ أكثر من متؽٌر من نفس النوع فمن الممكن أن نعرفّه بهذه‬
‫الطرٌمة‪...‬‬

‫; ‪int num1=5 , num2=10 , sum‬‬

‫ٖٔ‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫مثال ‪:‬‬

‫) (‪static void Main‬‬


‫{‬
‫; ‪int x = 10‬‬
‫;‪x=5‬‬
‫; ‪x = 20‬‬
‫}‬
‫أدخلنا ثالث لٌم للمتؽٌر‪ ،‬تكون لٌمة المتؽٌر الجدٌدة هً آخر لٌمة دخلت له‪.‬‬

‫إذا تكون لٌمة المتؽٌر ‪ x‬تساوي ٕٓ‪.‬‬

‫مالحظة ‪:‬‬

‫ال ٌجوز تعرٌؾ المتؽٌر أكثر من مرة فً نفس المكان من الكود‪.‬‬

‫فمثال ‪:‬‬

‫) (‪static void Main‬‬


‫{‬
‫; ‪int x =1‬‬
‫; ‪int x =5‬‬
‫}‬
‫عرؾ ُمسبما‪.‬‬
‫خطأ ألن هذا المتؽٌر ُم ّ‬

‫تسمية المتغير‬

‫ٌجب أن ٌكون اسم معبر عن نوع البٌانات التً ستُخزن فمثال إذا كان اسم او ُ‬
‫عمر‬
‫شخص‪.‬‬

‫;‪string Name‬‬
‫;‪int Age‬‬
‫ٕٖ‬
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

: ‫وال ٌجوز أن ٌبدأ المتؽٌر بؤي من الرموز اآلتٌة‬

!#$%^&-=+)(?

_ ‫لكن ممكن أن ٌبدأ بـ‬

int _name ;  ‫صحٌح‬

‫ لكن هنان بعض الكلمات المحجوزة فً اللؽة‬،‫ٌمكننا أن نسمً المتؽٌر بؤي اسم نرٌده‬
... ‫التً ال نستطٌع تسمٌة المتؽٌر بنفس اسمها‬

abstract as base bool

break byte case catch

char checked class const

continue decimal default delegate

do double else enum

event explicit extern false

finally fixed float for

foreach goto if implicit

ٖٖ
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

in in (generic int interface


modifier)

internal is lock long

namespace new null object

operator out out override


(generic
modifier)

params private protected public

readonly ref return sbyte

sealed short sizeof stackalloc

static string struct switch

this throw true try

typeof uint ulong unchecked

unsafe ushort using using

ٖٗ
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

static

virtual void volatile while

add alias ascending

async await descending

dynamic from get

global group into

join let nameof

orderby partial (type) partial (method)

remove select set

value var when (filter condition)

where where (query yield


(generic clause)
type
constraint)

ٖ٘
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫فمثال ال نستطٌع تعرٌؾ متؽٌر هكذا ‪int void‬‬


‫هذا ؼٌر صحٌح وسٌحدث خطؤ‪ٌ ،‬جب االبتعاد عن هذه الكلمات فً تسمٌة المتؽٌرات‬
‫فهً كلمات محجوزة فً اللؽة ولها استخدامات معٌنة‪.‬‬

‫كل متؽٌر نعرفّه ٌكون له نطاق ومجال ٌُرى فٌه فً الكود فإما أن ٌكون ‪:‬‬
‫‪ ( Local‬محلً ) ‪ :‬وٌكون ذلن فً نطاق محدد ونحن نحدد مدى رإٌة مترجم‬
‫اللؽة له فً بالً الكود من خالل لوسٌن المجموعة } {‬
‫‪ ( Global‬شامل أو عام ) ‪ :‬وٌكون مرئً فً كل الكود داخل الـ ‪ class‬أي‬
‫ٌكون فً بداٌة الـ ‪.class‬‬

‫مالحظة ‪ :‬عندما تعطً لٌمة إبتدائٌة للمتؽٌر فإنه ٌستخدمها فمط فً حالة أنن لم تُدخل‬
‫له لٌمة أخرى‪.‬‬
‫مثال ‪:‬‬

‫‪1‬‬

‫‪Global‬‬
‫‪2‬‬

‫‪3‬‬
‫‪Local‬‬

‫‪ٖٙ‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫فً هذه الصورة ٌكون المتؽٌر ‪ x‬عام‪ ،‬أي مرئً فً كل الكود الذي فً هذا الـ ‪class‬‬
‫الذي ٌُسمى ‪Test‬‬

‫ب حرؾ ‪ x‬فً أي مكان فً الصورة تحت اسم الـ ‪ class‬سٌظهر لن المتؽٌر‬ ‫فإذا ُكتِ َ‬
‫‪ x‬لكن بشرط أن ٌكون داخل مجال الـ ‪ class‬أي أنه ال ٌمع بٌن خارج أول لوس‬
‫وآخر لوس للـ ‪ class‬كما ٌشٌر السهم ( ‪ ) 1‬فً الصورة‪ .‬وال ٌجوز إعادة تعرٌؾ‬
‫عرؾ ُمسبما حٌث أنه متؽٌر عام داخل الـ‬
‫متؽٌر آخر بنفس أسم المتؽٌر ‪ x‬ألنه ُم ّ‬
‫‪.class‬‬

‫ُتعرؾ علٌه خارج لوسٌن‬


‫ّ‬ ‫أما المتؽٌر ‪ y‬فإنه ألل شمولٌة من ‪ x‬حٌث أنه ال ٌ‬
‫المجموعة للدالة‪ٌُ ،‬رى بؤي مكان داخل لوسٌن المجموعة الخاصٌن بالدالة كما‬
‫ٌشٌر السهم ( ‪ .) 2‬وٌجوز تعرٌؾ متؽٌر آخر بنفس اسمه خارج ألواس الدالة‬
‫الخاصة به‪.‬‬

‫المتؽٌر ‪ z‬هو األلل شمولٌة فٌهم حٌث أنه ال ٌُت َ َعرؾ علٌه خارج الموسٌن المحٌطٌن‬
‫به كما ٌشٌر السهم ( ‪.) 3‬‬

‫كل لوس مجموعة هو عبارة عن مرحلة ومستوى كلما صعد المتؽٌر أعلى خارج‬
‫األلواس كلما زادت شمولٌته ومعرفته فً أجزاء أخرى فً الـكود‪.‬‬

‫الثابت ( ‪) Constant‬‬
‫الفرق بٌن الثابت والمتؽٌر أن الثابت لٌمته ثابته لن تتؽٌر طوال البرنامج‬

‫أما المتؽٌر فٌمكن تؽٌٌر لٌمته‪ ،‬إذا حاولنا تؽٌٌر الثابت سٌحدث خطؤ فً البرنامج‪.‬‬

‫وٌكون بالشكل اآلتً ‪:‬‬

‫; ‪const + data type + name + value‬‬


‫; "‪const string name="Mahmoud‬‬

‫‪ٖ7‬‬
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

const int number = 1 ;

.‫وٌمكن أن نستخدمه فً المٌم الرٌاضٌة والفٌزٌائٌة الثابتة‬

: ٕ‫تمارٌن‬

ٗ ‫أحسب مساحة دائرة نصؾ لطرها‬


using System;
namespace Second_program
{
class Program
{
static void Main()
{
const float pi = 3.14f ;
int radius = 4 ;
float area = pi * (radius * radius);
Console.WriteLine(area);
}
}
}

ٖ2
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫تحويل أنواع المتغيرات‬


‫( ‪) Conversions‬‬
‫‪ -1‬تحويل ضمني ( ‪) implicit‬‬
‫وهً أن تؤخذ متؽٌر ما لتضعه فً متؽٌر أكبر منه فً الحجم أو ٌساوٌه ونفس نوع‬
‫البٌانات بدون أن ٌحدث أي فمدان أو إضاعة لجزء من البٌانات التً بداخله‪.‬‬

‫مثال ‪:‬‬
‫مساحة أكبر ( ‪) 8 byte‬‬
‫عدد صحٌح‬ ‫;‪long x‬‬

‫مساحة أصؽر ( ‪) 4 byte‬‬


‫عدد صحٌح‬ ‫;‪int y‬‬

‫;‪x=y‬‬

‫فً هذه الحالة وضعنا لٌمة المتؽٌر ‪ y‬داخل المتؽٌر ‪. x‬‬

‫حٌث أن حجم المتؽٌر ( ‪ ٙٗ ) x‬بت وحجم المتؽٌر ( ‪ ٖٕ ) y‬بت فٌمكن للمتؽٌر ذو‬
‫الحجم األكبر أن ٌحتوي على المتؽٌر ذو الحجم األلل بدون أي حدوث عملٌة فمد‬
‫للبٌانات‪ .‬أما إذا حاولت فعل العكس فً الحالة الطبٌعٌة فسٌحدث خطؤ وٌحدث فمد‬
‫للبٌانات‪.‬‬

‫‪ٖ9‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫إذا حاولت وضع الصندوق فً الشكل ( ‪ ) 2‬فً الصندوق فً الشكل ( ‪ ) 1‬لن ٌحدث‬
‫أي خطؤ ألن الصندوق فً الشكل ( ‪ ) 1‬أكبر من الصندوق اآلخر‪ ،‬لكن فً حالة عكس‬
‫هذه العملٌة سٌحدث خطؤ ألن الصندوق فً الشكل ( ‪ ) 2‬أصؽر فً الحجم‪.‬‬

‫‪2‬‬ ‫‪1‬‬

‫‪ -2‬تحويل صريح ( ‪) Explicit or Casting‬‬


‫وهً عكس الحالة السابمة‪ ،‬وتحدث عندما ٌوجد إحتمال فمدان فً البٌانات أثناء عملٌة‬
‫تمرٌر البٌانات إلى المتؽٌرات الجدٌدة‪ ،‬وٌمكننا وضع بٌانات المتؽٌرات ذي االحجام‬
‫المختلفة واالنواع المختلفة داخل بعضها بشرط تؽٌٌر نوع المتؽٌرالضٌؾ إلى نفس نوع‬
‫المتؽٌر ال ُمضٌؾ‪.‬‬

‫وفً حالة األعداد ٌمكننا وضع المٌم الكسرٌة ‪ float‬أو ‪ double‬بداخل متؽٌرات نوعها‬
‫‪ int‬أو ‪ long‬بشرط تؽٌٌر نوعها ‪.‬‬

‫مثال ٔ‪:‬‬

‫;‪long x‬‬

‫;‪int y‬‬

‫;‪y = ( int ) x‬‬

‫ٓٗ‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫مثال ٕ‪:‬‬

‫; ‪int x = 10‬‬

‫; ‪float y = 3.0f‬‬

‫; ‪x = ( int ) y‬‬

‫أو ٌمكننا إستخدام هذه الطرٌمة ‪:‬‬

‫;) ‪x = Convert.ToInt32( y‬‬

‫وفً هذه الحالة فإن المتؽٌر ال ُمضٌؾ ٌستطٌع إستمبال المتؽٌر الضٌؾ‪.‬‬

‫الفرق بٌن ‪:‬‬

‫‪Convert.ToInt64‬‬ ‫‪Convert.ToInt32‬‬ ‫‪Convert.ToInt16‬‬

‫تحول المتؽٌر إلى النوع‬ ‫تحول المتؽٌر إلى النوع‬ ‫أي أنها تحول المتؽٌر‬
‫‪ long‬حٌث أن النوع‬ ‫‪ int‬حٌث أن النوع ‪int‬‬ ‫إلى النوع ‪ short‬حٌث‬
‫‪ long‬حجمه ‪ 64‬بت أي‬ ‫حجمه ٕٖ بت أي ٗ‬ ‫أن النوع ‪ short‬حجمه‬
‫‪ 2‬باٌت‬ ‫باٌت‬ ‫‪ ٔٙ‬بت أي ٕ باٌت‬

‫تذكر أن ‪:‬‬
‫ّ‬
‫إذا جاء حرؾ ‪ u‬لبل هذه األنواع من البٌانات‬

‫( ‪) short , int , long , float , double‬‬

‫معنى ذلن أن هذه األنواع تستطٌع أخذ لٌمة موجبة فمط‪ ،‬وحرؾ ‪ u‬إختصار لـ‬
‫‪.unsigned‬‬

‫ٔٗ‬
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

... ‫توجد بعض الدوال لتحوٌل النصوص‬

: ‫مثل‬

decimal ToDecimal(String)

float ToSingle(String)

double ToDouble(String)

short ToInt16(String)

int ToInt32(String)

long ToInt64(String)

ushort ToUInt16(String)

uint ToUInt32(String)

ulong ToUInt64(String)

ٕٗ
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫وتوجد أٌضا الدالة ‪Parse( ) <---‬‬

‫لتحوٌل أي شًء من النوع ( ‪) string‬‬

‫فمثال إذا أردنا إدخال لٌمة لمتؽٌر نوعه ‪ int‬من خالل المستخدم ‪:‬‬

‫;‪using System‬‬
‫‪namespace First_program‬‬
‫{‬
‫‪class Program‬‬
‫{‬
‫) (‪static void Main‬‬
‫{‬
‫;‪int num‬‬
‫;)) (‪num = int.Parse(Console.ReadLine‬‬
‫}‬
‫}‬
‫}‬

‫هذا الكود معناه أنه ٌوجد متؽٌر من النوع ( ‪ ) int‬وسٌؤخد لٌمته من المستخدم بواسطة‬
‫الدالة ) (‪ ReadLine‬لكن هذه الدالة ال تمبل إال نصوص‪ ،‬لذا سنجعلها تمبل أعداد‬
‫صحٌحة من خالل دالة ) (‪.Parse‬‬

‫وآخرا سنضع كل هذا داخل المتؽٌر الذي نرٌد إدخال المٌمة له كما فً المثال السابك‪.‬‬

‫أو‬

‫; ) ) (‪num = Convert.ToInt32(Console.ReadLine‬‬

‫ٖٗ‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫التعليمات‬
‫( ‪) Comments‬‬

‫التعلٌمات هً عبارة عن شرح موجز لجزء معٌن من الكود البرمجً فٌجعل الكود سهل‬
‫المراءة والفهم‪ ،‬وٌتجاهل المترجم التعلٌمات وال ٌتعامل معها نهائٌا فهً مجرد مالحظات‬
‫أو تنوٌه ٌكتبه المبرمج لنفسه أو لمن ٌعمل بعده‪ ،‬إذا ُو ِج َد فٌها خطؤ نحوي أو منطمً فال‬
‫ٌهم فلن ٌحدث أي خطؤ‪.‬‬

‫أنواع التعلٌمات ‪:‬‬

‫تعلٌك لسطر فردي ( ‪) //‬‬

‫مثال ‪:‬‬

‫;‪using System‬‬
‫‪namespace First_program‬‬
‫{‬
‫‪class Program‬‬
‫{‬
‫) (‪static void Main‬‬
‫{‬
‫‪int num; // this is the first variable‬‬
‫}‬
‫}‬
‫}‬

‫ٗٗ‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫تعلٌك متعدد األسطر ( ‪) /* ….. */‬‬

‫أي أنه ٌمكن أن نكتب مالحظات فً أكثر من سطر‪ ،‬فٌكون هذا الجزء من الكود ؼٌر‬
‫مرئً بالنسبة للمترجم‪.‬‬

‫مثال ‪:‬‬

‫;‪using System‬‬
‫‪namespace First_program‬‬
‫{‬
‫‪class Program‬‬
‫{‬
‫)(‪static void Main‬‬
‫{‬
‫;‪int num‬‬
‫‪/* this is the first variable‬‬
‫‪this is the first variable‬‬
‫‪this is the first variable‬‬
‫‪this is the first variable */‬‬
‫}‬
‫}‬
‫}‬

‫سٌتجاهله المترجم تماما‪.‬‬

‫أٌضا ال ٌجب أن ننشؽل بالتعلٌمات كثٌرا‪ ،‬ت ُكتب التعلٌمات فً االجزاء المهمة التً‬
‫تحتاج إلى توضٌح فمط‪.‬‬

‫٘ٗ‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫المعامالت الرياضية والمنطمية‬


‫( ‪) Arithmetic and Logic operators‬‬

‫المعامالت الرياضية‬
‫الجمع ( ‪) +‬‬

‫الطرح ( ‪) -‬‬

‫الضرب ( * )‬

‫المسمة ) ‪( /‬‬

‫بالً المسمة ( ‪) %‬‬

‫الزٌادة للمتؽٌر بممدار ٔ ( ‪) ++‬‬

‫النمصان للمتؽٌر بممدار ٔ ( ‪) --‬‬

‫مثال ‪:‬‬

‫بفرض أن ‪....‬‬

‫‪A=5‬‬ ‫‪and‬‬ ‫‪B=2‬‬


‫‪A+B=7‬‬
‫‪A–B=3‬‬
‫‪A * B = 10‬‬
‫‪A / B = 2.5‬‬

‫‪ٗٙ‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫‪A%B=1‬‬
‫‪A++ = 6‬‬
‫‪A-- = 4‬‬

‫ٌمكن أن نضع عالمتٌن الجمع بعد المتؽٌر أو لبله‪.‬‬


‫لكن انتبه‪!...‬‬
‫‪ ++A‬ال تساوي ‪A++‬‬
‫ألنه عندما نضعهم لبل المتؽٌر فإن الزٌادة فً ممدار المتؽٌر تحدث أوال ثم تحدث‬
‫العملٌة التً تلٌها على المتؽٌر‪ ،‬أما إذا وضعنا العالمتٌن بعد المتؽٌر فإن العملٌة ستحدث‬
‫أوال ثم بعد ذلن تحدث الزٌادة فً المٌمة‪.‬‬

‫مثال ‪:‬‬
‫;‪using System‬‬
‫‪namespace First_program‬‬
‫{‬
‫‪class Program‬‬
‫{‬
‫)(‪static void Main‬‬
‫{‬
‫;‪int num1 = 10‬‬
‫;‪int num2 = 8‬‬
‫;‪int sum‬‬
‫;)‪sum=(num1++) + ( ++num2‬‬
‫;)‪Console.WriteLine(sum‬‬
‫‪//result=19‬‬
‫‪ٗ7‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫;)‪Console.WriteLine(num1‬‬
‫‪//result =11‬‬
‫;)‪Console.WriteLine(num2‬‬
‫‪//result =9‬‬
‫}‬
‫}‬
‫}‬

‫سٌطبع ‪ ٔ9‬فمط‪ ،‬لماذا؟‬


‫أول متؽٌر لم ٌحدث له تؽٌٌر ولم تزد لٌمته بعد‪ ،‬ألنه ٌموم بالعملٌة على المتؽٌر أوال ثم‬
‫الزٌادة ثانٌا‪ ،‬فمام بعملٌة الجمع وبعدها زادت لٌمته بممدار ٔ‪ ،‬أما المتؽٌر الثانً فزادت‬
‫لٌمته أوال ثم لام بعملٌة الجمع‪ ،‬وإذا لمنا بطباعة المتؽٌرٌن بعد العملٌة ستجدهم لد زادا‬
‫بممدار ٔ‪ ،‬والطرح كذلن أٌضا‪.‬‬

‫مثال ‪:‬‬

‫;‪using System‬‬
‫‪namespace First_program‬‬
‫{‬
‫‪class Program‬‬
‫{‬
‫)(‪static void Main‬‬
‫{‬
‫;‪int A=10‬‬
‫;‪int B=8‬‬
‫;‪int sum‬‬
‫‪ٗ2‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫) ‪sum= ( A++ ) + ( ++B ) + ( --A ) + ( B-- ) +( B++‬‬


‫;)‪+(A)-(B‬‬
‫) ‪// ( 10 ) + ( 9 ) + ( 10 ) + ( 9 ) + ( 8 ) + ( 10 ) - ( 9‬‬
‫الناتج = ‪Console.WriteLine( sum ) ; // ٗ7‬‬
‫}‬
‫}‬
‫}‬

‫صٌن مع‬
‫إذا ُو ِج َد متؽٌران نوعهما ‪ string‬وبٌنهما عالمة الجمع فإنها ستدمج النَ َ‬
‫بعضهما‪.‬‬

‫مثال ‪:‬‬

‫; " ‪string x = " Hello‬‬

‫; " ‪string y = " World‬‬

‫; ) ‪Console.WriteLine( x + y‬‬

‫سٌطبع ‪:‬‬

‫‪Hello World‬‬

‫معامالت الممارنة ‪:‬‬

‫ٌساوي ( == )‬
‫ال ٌساوي ( =! )‬
‫أكبر من ( > )‬
‫ألل من ) < (‬
‫أكبر من أو ٌساوي ) => (‬
‫ألل من أو ٌساوي ) =< (‬

‫‪ٗ9‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫مثال ‪:‬‬
‫بإفتراض أن ‪...‬‬
‫‪A = 10 , C = 10 and B = 5‬‬
‫‪A == C‬‬

‫‪A>B‬‬

‫‪A != B‬‬
‫‪B<A‬‬
‫‪A >= C‬‬
‫‪B <= A‬‬

‫مالحظة ‪:‬‬

‫عالمة = لٌست عالمة ٌساوي إنما تسمى تعٌٌن أو تخصٌص ( ‪.) assignment‬‬

‫فإذا لولنا أن ‪:‬‬

‫‪A=5‬‬

‫أو‬

‫‪A=B‬‬

‫معنى هذا أن لٌمة الجانب األٌمن للعالمة (=) تنتمل إلى الجانب األٌسر‪.‬‬

‫المٌمة ‪ 5‬تنتمل إلى المتؽٌر ‪A‬‬

‫والمتؽٌر ‪ٌ B‬وضع بداخل المتؽٌر ‪ A‬وتصبح لٌمة المتؽٌر ‪ A‬نفس لٌمة المتؽٌر ‪B‬‬
‫ولٌمة المتؽٌر ‪ B‬ال تتؤثر وتظل كما هً‪.‬‬

‫ٓ٘‬
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

: ‫مثال‬
using System;
namespace First_program
{
class Program
{
static void Main( )
{
int num1 = 10;
int num2 = 8;
num1 = num2;
Console.WriteLine( num1 );
//2 = ‫الناتج‬
Console.WriteLine( num2 );
// 2 = ‫الناتج‬
}
}
}

٘ٔ
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫المعامالت المنطمية‬
‫) && ( ‪ٌ : Logical AND‬جب أن تكون المٌمتٌن صحٌحتٌن‬
‫) || ( ‪ٌ : Logical OR‬جب أن تكون إحدى المٌمتٌن صحٌحة‬
‫) ! ( ‪ٌ : Logical NOT‬عكس المٌمة‪ ،‬فإذا كانت صحٌحة فً األصل تنفٌها األداة‬
‫وتصبح خطؤ والعكس‪.‬‬
‫وسنفهم المعنى أكثر عندما نصل إلى " الجمل الشرطٌة "‪.‬‬
‫المعامالت الثنائٌة التً تتعامل مع البت ( ‪) Bit‬‬
‫&‬
‫|‬
‫^‬
‫أي أنها تتعامل مع البٌانات على شكل النظام الثنائً ( ‪.) Binary System‬‬
‫مالحظة ‪:‬‬
‫أي حرؾ أو رلم ٌتم تحوٌله داخل الكمبٌوتر إلى النظام الثنائً أي إلى أصفار وآحاد‬
‫( ‪ )0111001010010110‬فكما ذكرت فهذه تسمى لؽة اآللة والكمبٌوتر ال ٌفهم‬
‫ؼٌرها‪.‬‬
‫ٌتم تحوٌل األرلام العشرٌة إلى النظام الثنائً بهذه الطرٌمة ‪:‬‬
‫مً بالنظام الثنائً‪.‬‬ ‫ُ‬ ‫ُ‬
‫ٕ أس صفر إلى ٕ أس ما ال نهاٌة‪ ،‬لذا س َ‬

‫‪5‬‬ ‫‪4‬‬ ‫‪3‬‬ ‫‪2‬‬ ‫‪1‬‬ ‫‪0‬‬

‫‪2‬‬ ‫‪2‬‬ ‫‪2‬‬ ‫‪2‬‬ ‫‪2‬‬ ‫‪2‬‬


‫=‬
‫‪32‬‬ ‫‪16‬‬ ‫‪8‬‬ ‫‪4‬‬ ‫‪2‬‬ ‫‪1‬‬

‫ٕ٘‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫وٌتم جمع كل المٌم التً تُك ِو ّن المٌمة ال ُمعطاة‪ ،‬والمٌمة التً نؤخذها نضع مكانها ‪ 1‬والتً‬
‫لم نستخدمها نضع مكانها ‪ .0‬ال ٌشترط تكرار معٌن لألساس ٕ‪ ،‬فمط ما تحتاج إلٌه‬
‫إلخراج المٌمة بالنظام الثنائً‪ ،‬أو ٌُمكنن أن تمسم المٌمة ال ُمعطاة على العدد ٕ وبالً‬
‫المسمة ٌُك ِو ّن المٌمة بالنظام الثنائً‪.‬‬
‫مثالٔ ‪:‬‬
‫ح ِول المٌمة ‪ ٔ9‬إلى النظام الثنائً‪.‬‬

‫‪4‬‬ ‫‪3‬‬ ‫‪2‬‬ ‫‪1‬‬ ‫‪0‬‬

‫‪2‬‬ ‫‪2‬‬ ‫‪2‬‬ ‫‪2‬‬ ‫‪2‬‬

‫‪16‬‬ ‫‪8‬‬ ‫‪4‬‬ ‫‪2‬‬ ‫‪1‬‬

‫‪1‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪1‬‬ ‫‪1‬‬

‫ثم نبحث عن األرلام التً تُك ِو ّن الرلم ‪.ٔ9‬‬


‫فتكون ( ‪ ) 16,2,1‬فنضع ‪ 1‬تحت كل لٌمة لد أخذناها و‪ 0‬تحت كل لٌمة لم نستخدمها‬
‫فً تكوٌن الرلم العشري‪.‬‬
‫أو نمسم المٌمة ‪ ٔ9‬على ٕ ونخرج بالً المسمة‬
‫وتكون بهذا الشكل ‪:‬‬
‫بالً المسمة‬ ‫األساس‬ ‫المٌمة‬

‫ٔ‬ ‫ٕ‬ ‫‪ٔ9‬‬


‫ٔ‬ ‫ٕ‬ ‫‪9‬‬
‫ٓ‬ ‫ٕ‬ ‫ٗ‬
‫ٓ‬ ‫ٕ‬ ‫ٕ‬
‫ٔ‬ ‫ٕ‬ ‫ٔ‬
‫ٔ‬

‫ٖ٘‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫فتكون المٌمة (‪ )ٔ9‬بالنظام الثنائً هً ‪10011 <---‬‬


‫مثالٕ ‪:‬‬
‫ح ِول المٌمة ٖٔ إلى النظام الثنائً‪.‬‬
‫أُس‬
‫‪3‬‬ ‫‪2‬‬ ‫‪1‬‬ ‫‪0‬‬

‫‪2‬‬ ‫‪2‬‬ ‫‪2‬‬ ‫‪2‬‬

‫‪8‬‬ ‫‪4‬‬ ‫‪2‬‬ ‫‪1‬‬

‫‪1‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫‪1‬‬

‫نبحث عن األرلام التً تُك ِو ّن الرلم ٖٔ‪.‬‬


‫فتكون ( ‪ ) 8,4,1‬فنضع ‪ 1‬تحت كل لٌمة لد أخذناها و‪ 0‬تحت كل لٌمة لم نستخدمها فً‬
‫تكوٌن الرلم العشري‪.‬‬
‫فتكون المٌمة (ٖٔ) بالنظام الثنائً هً ‪1101 <---‬‬
‫شرح هذه الجزئٌة كان فمط لتفهم كٌفٌة عمل هذه المعامالت (" & | ^ ") مع األرلام‪.‬‬
‫مثال ‪:‬‬
‫‪ -‬فً حالة ( & )‬
‫‪A = 5 and B = 20‬‬
‫=‪A&B‬‬
‫عند جمع ‪ 1‬و ‪ 0‬بإستخدام & فإن الناتج‬ ‫‪00101‬‬
‫ٌكون ‪ ،0‬وٌكون الناتج ‪ 1‬فً حالة‬ ‫&‬
‫واحدة‪ ...‬إذا كان الجمع بٌن ‪ 1‬و ‪.1‬‬
‫‪10100‬‬
‫= ــــــــــــــــ‬
‫‪00100‬‬

‫ٗ٘‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫إذا ‪A & B = 4‬‬

‫‪ -‬فً حالة ( | )‬

‫= ‪A |B‬‬
‫عند جمع ‪ 1‬و ‪ 0‬بإستخدام | فإن الناتج‬
‫‪00101‬‬
‫ٌكون ‪ ،1‬وٌكون الناتج ‪ 0‬فً حالة‬
‫واحدة‪ ...‬إذا كان الجمع بٌن ‪ 0‬و ‪.0‬‬ ‫|‬
‫‪10100‬‬
‫=ــــــــــــــــ‬
‫‪10101‬‬
‫إذا ‪A | B = 21‬‬

‫فً حالة ( ^ )‬

‫عند جمع ‪ 1‬و ‪ 0‬بإستخدام ^ فإن الناتج‬ ‫=‪A^B‬‬


‫ٌكون ‪ ،1‬وٌكون الناتج ‪ 0‬فً حالة أن‬ ‫‪00101‬‬
‫المٌمتان متشابهتان ‪ 1‬و ‪ 1‬أو ‪ 0‬و ‪0‬‬ ‫^‬
‫‪10100‬‬
‫=ـــــــــــــــــ‬
‫‪10001‬‬
‫إذا ‪A ^ B = 17‬‬

‫‪A‬‬ ‫‪B‬‬ ‫‪A&B‬‬ ‫‪A|B‬‬ ‫‪A^B‬‬

‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬

‫‪0‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫‪1‬‬ ‫‪1‬‬

‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪0‬‬

‫‪1‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪1‬‬ ‫‪1‬‬

‫٘٘‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫معامالت النمل أو اإلسناد ( ‪:) Assigment‬‬

‫=‬
‫=‪+‬‬
‫=‪-‬‬
‫=*‬
‫=‪/‬‬
‫=‪%‬‬
‫=&‬
‫=^‬
‫=|‬

‫مثال ‪:‬‬

‫‪A = 3 and B = 2‬‬

‫‪ A += B‬تعنً أن المتؽٌر ‪ A‬ستُجمع لٌمته على المتؽٌر ‪ B‬ثم سٌوضع ناتج الجمع‬

‫بداخل ‪.A‬‬

‫إنما هً إختصار لهذا النمط ‪:‬‬

‫‪A=A+B‬‬

‫‪A -= B‬‬ ‫‪ A = A- B‬‬

‫طرح من المتؽٌر األول ثم ست ُوضع لٌمة الطرح فً الجانب األٌسر‪.‬‬


‫المتؽٌر الثانً سٌُ َ‬

‫( ‪ ) A*=B  A=A*B‬حاصل ضرب المٌمتٌن ٌُوضع فً الجانب األٌسر‪.‬‬

‫( ‪ ) A/=B  A=A/B‬حاصل لسمة المٌمتٌن ٌُوضع فً الجانب األٌسر‪.‬‬

‫( ‪ ) A%=B  A=A%B‬حاصل بالً لسمة المٌمتٌن ٌُوضع فً الجانب األٌسر‪.‬‬


‫‪٘ٙ‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫( ‪ ) A&=B  A=A&B‬ناتج العملٌة ٌُوضع فً الجانب األٌسر‪.‬‬

‫( ‪ ) A^=B  A=A^B‬ناتج العملٌة ٌُوضع فً الجانب األٌسر‪.‬‬

‫( ‪ ) A|=B  A=A|B‬ناتج العملٌة ٌُوضع فً الجانب األٌسر‪.‬‬

‫أولويات العمليات الحسابية ‪:‬‬

‫( ) ٌُنَفَذّ ما بداخل األلواس أوال‪.‬‬

‫‪ * / %‬ت ُح َ‬
‫سب من الشمال إلى الٌمٌن وأٌهم ٌؤتً أوال فتحدث عملٌته أوال‪.‬‬

‫ت ُح َ‬
‫سب من الشمال إلى الٌمٌن وأٌهم ٌؤتً أوال فتحدث عملٌته أوال‪.‬‬ ‫‪- +‬‬

‫=> > =< < ت ُح َ‬


‫سب من الشمال إلى الٌمٌن وأٌهم ٌؤتً أوال فتحدث عملٌته أوال‪.‬‬

‫== ت ُح َ‬
‫سب من الشمال إلى الٌمٌن وأٌهم ٌؤتً أوال فتحدث عملٌته أوال‪.‬‬ ‫=!‬

‫المٌمة التً بالجانب األٌمن تنتمل للجانب األٌسر‪.‬‬ ‫=‬

‫مثال ‪:‬‬

‫‪(6/2+5)*3%7–1‬‬
‫الناتج ‪2 :‬‬
‫)‪4/2+6*3-5%5-1*(3-1‬‬
‫الناتج ‪8 :‬‬

‫‪٘7‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫توجد أٌضا بعض العوامل التً نستخدمها فً الكود بإستمرار مثل‪:‬‬

‫النمطة ( دوت ) –> ( ‪ ) .‬تستخدم للوصول إلى الدوال والمتؽٌرات والـ ‪classes‬‬

‫عندما نمول ‪...‬‬

‫;) (‪System.Console.WriteLine‬‬

‫‪ System‬هً عبارة عن ‪ namespace‬و للوصول إلى ما بداخلها من ‪ classes‬نكتب‬


‫نمطة ( ‪) .‬‬

‫‪ Console‬هً عبارة عن ‪ class‬و للوصول إلى ما بداخله من دوال ومتؽٌرات نكتب‬


‫نمطة ( ‪) .‬‬

‫وكذلن دالة ) (‪ WriteLine‬و ) (‪.ReadLine‬‬

‫] [ تُستخدم مع المصفوفات وللوصول إلى فهرس المصفوفة‪.‬‬

‫( ) تُستخدم مع الدوال‪ ،‬أي دالة ٌجب أن تحتوي على هذٌن الموسان أثناء اإلنشاء‬
‫واإلستدعاء‪ ،‬وأٌضا نستخدمها عند تحوٌل أنواع البٌانات‪.‬‬

‫تمارٌن ‪:‬‬

‫أكتب برنامج لٌب ِد ّل لٌمتٌن لمتؽٌرٌن مع بعضهما ‪:‬‬

‫مثال لتبسٌط الفكرة ‪:‬‬

‫إذا كان معن كوب ماء وكوب آخر من الشاي واردت أن تبدل الماء بالشاي والعكس‪،‬‬
‫ستؤتً بكوب ثالث فارغ لكً ٌحتوي على احد النوعٌن إلى أن تبدل الكوبٌن اآلخرٌن‪.‬‬
‫;‪using System‬‬
‫‪namespace First_program‬‬
‫{‬
‫‪class Program‬‬

‫‪٘2‬‬
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

{
static void Main( )
{
int num1=10;
int num2=15;
int temp;
temp = num1;
num1 = num2;
num2 = temp;
Console.WriteLine(num1);
//num1=15
Console.WriteLine(num2);
//num2 =10
}
}
}

: ‫تمارٌن‬

.‫أكتب برنامج لحساب المتوسط الحسابً لخمسة أرلام ٌدخلها المستخدم‬


using System;
namespace Third_program
{
class Program
{
static void Main( )
{
double n1 , n2 , n3 , n4 , n5 , average ;
Console.WriteLine(" enter five numbers ");
n1 = double.parse(Console.ReadLine( ) ) ;

٘9
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

n2 = double.parse(Console.ReadLine( ) ) ;
n3 = double.parse(Console.ReadLine( ) ) ;
n4 = double.parse(Console.ReadLine( ) ) ;
n5 = double.parse(Console.ReadLine( ) ) ;
average = ( n1 + n2 + n3 + n4 + n5 ) /5 ;
Console.WriteLine( average ) ;
}
}
}

ٙٓ
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫ال ُجمل الشرطية‬


‫( ‪) Conditional Statements‬‬

‫‪if‬‬
‫هً عبارة عن لرارات لائمة على شروط‪ ،‬فإذا تحمك الشرط ٌُنفذ الكود الذي بداخل‬
‫جملة التحكم ( ‪.) if‬‬

‫مثال‪:‬‬

‫إذا كانت درجتن أكبر من ٓ٘‪ %‬أنت ناجح‪.‬‬

‫إذا كان تمدٌرن أكبر من ٘‪ %2‬فٌكون امتٌاز‪.‬‬

‫وهكذا ‪...‬‬

‫) الشرط ( ‪if‬‬
‫‪code‬‬

‫مثال ‪:‬‬
‫) ‪if ( grade>=85‬‬
‫; )" ‪Console.WriteLine(" Excellent‬‬

‫نكتب ‪ if‬ثم نفتح لوسٌن لكتابة الشرط بداخلهما ونكتب بداخلها الكود المراد تنفٌذه‪.‬‬

‫وهً تنفذّ سطر فردي تحتها فمط فً حالة عدم وضع لوسٌن مجموعة‪.‬‬

‫ٔ‪ٙ‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫أما إذا أردنا كتابة أكثر من أمر وأكثر من سطر نكتب الكود بداخل } {‪.‬‬

‫)"‪if ( your_name=="Mahmoud‬‬
‫{‬
‫;)"‪Console.WriteLine("Hello Mahmoud‬‬
‫; "‪your_name="Mahmoud"+"Soliman‬‬
‫}‬

‫ٌمكننا إجراء وتنفٌذ أي كود نرٌده طالما هذا الشرط صحٌح‪.‬‬

‫فً المثال السابك كلمة ‪ grade‬هً عبارة عن متؽٌر ثم الشرط =<‬

‫ومعنى الكود أنه إذا كانت درجتن أكبر من أو تساوي ٘‪ 2‬سٌُنَفَذ الكود الذي بداخل جملة‬
‫‪ if‬وفً هذه الحالة سٌطبع " ‪ ،" Excellent‬فٌما عدا ذلن لن ٌُنفذها‪.‬‬

‫ثم نكتب الكود بداخل هذٌن الموسان } {‬

‫وٌجب كتابة الشرط بداخل هذٌن الموسان ( )‬

‫ونستطٌع كتابة أكثر من شرط بداخلها‪ ،‬فمثال إذا كنا نرٌد فحص بٌانات شخص كاملة‪،‬‬
‫مثل ( اسمه ‪ ،‬عمره ‪ ،‬جنسه ‪ ،‬رلم تلٌفونه )‬

‫نحدد إذا ُو ِج َد خطؤ فً أحد هذه الشروط ٌكمل تنفٌذ الكود أو ال‪.‬‬

‫وذلن بواسطة ‪:‬‬

‫) ! ‪( && , || , ^ ,‬‬

‫المعامالت المنطمٌة ( && ) وتعنً ( ‪ ) AND‬تتحمك من الجانب األٌسر واألٌمن إذا‬


‫ُوجد خطؤ فً احدهما فلن ٌتم تنفٌذ أي منها وٌكون ناتجهما خطؤ ولتعطً ناتجا صحٌحا‬
‫ٌجب أن ٌكون الجانبان صحٌحٌن‪.‬‬

‫ٕ‪ٙ‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫المعامالت المنطمٌة ( || ) وتعنً ( ‪ ) OR‬تتحمك من الجانب األٌسر واألٌمن ولن‬


‫تعطً خطؤ إال إذا كان الجانبان شرطهما خطؤ‪ ،‬إذا كان هنان جانب خطؤ وآخر صحٌح‬
‫فستتجاهل الخطؤ وتعطً ناتج صحٌح ألنه ٌوجد على األلل أحدهما صحٌح‪.‬‬

‫المعامالت المنطمٌة ( ^ ) وتعنً ( ‪ ) XOR‬أي أنه لكً ٌتم تنفٌذ الكود الذي بداخل ‪if‬‬
‫ٌجب أن ٌكون الجانبان مختلفٌن أي أن أحدهما صحٌح واآلخر خطؤ‪ ،‬إذا كان ناتج‬
‫الشرط فً الجانبٌن خطؤ أو كان ناتج الشرط فً الجانبٌن صحٌح فلن ٌتم تنفٌذ الكود‬
‫أٌضا‪ٌ .‬جب أن ٌكونا مختلفٌن ‪.‬‬

‫‪A‬‬ ‫‪B‬‬ ‫‪A&B‬‬ ‫‪A|B‬‬ ‫‪A^B‬‬

‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬

‫‪0‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫‪1‬‬ ‫‪1‬‬

‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪0‬‬

‫‪1‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪1‬‬ ‫‪1‬‬

‫جانب أٌمن && جانب أٌسر‬

‫مثال ‪:‬‬

‫||"‪if ( name == "Mahmoud" && age == 30 || gender == "Male‬‬

‫) "‪phone == "00000000‬‬

‫سم كل شرطٌن معا وبعد اإلنتهاء من الشرطٌن ٌكون‬


‫عندما ٌوجد أكثر من شرط فإنه ٌُم ِ ّ‬
‫ناتجهما ُمدخَل للشرط الذي ٌلٌه‪.‬‬

‫على سبٌل المثال نفرض أن ‪ name‬لٌمته صحٌحة و ‪ age‬لٌمته أٌضا صحٌحة‬


‫ٖ‪ٙ‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫إذا فناتج الشرط ٌكون صحٌحا أما إذا كانت أحدهما خطؤ فٌكون ناتج الشرط خطؤ‪ ،‬ثم‬
‫هذا الناتج ٌكون ُمدخل للشرط الذي بعده أي ٌكون ٌسار الـ ( || ) صحٌحا وٌسارها أٌا‬
‫ٌكن فٌكون ناتج الشرط صحٌح لكلٌهما ألن ( || ) تحتاج جانب واحد صحٌح على‬
‫األلل فٌكون الناتج النهائً صحٌحا لهذا الشرط‪ٌ ،‬تبمى آخر فحص وهو الـ ‪phone‬‬
‫وناتج الشرط الذي على ٌساره صحٌح وبما أن أداة الشرط ( || ) فٌكون الناتج النهائً‬
‫لجملة ‪ if‬صحٌح فٌتم تنفٌذ ما بداخلها‪.‬‬

‫‪1‬‬
‫&&‬
‫‪0‬‬
‫‪--------‬‬
‫)‪(0‬‬

‫||‬
‫‪1‬‬
‫‪-------‬‬
‫)‪(1‬‬
‫&&‬
‫‪1‬‬
‫‪----------‬‬
‫)‪(1‬‬

‫إذا كانت جملة الشرط عبارة عن متؽٌر من النوع ( ‪ ) bool‬وكتبنا الجملة بدون وضع‬
‫أي عالمات تحدد الشرط وكتبنا المتؽٌر الذي ٌحمل المٌمة فمط فستظل هذه المٌمة ثابتة‬
‫فلو كانت ‪ true‬فإن ‪ if‬دائما ستُنفَذ‪ ،‬أما إذا كانت ‪ false‬فلن ٌتم تنفٌذ ما بداخل ‪ if‬أبدا‪.‬‬

‫ٗ‪ٙ‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫مثال ‪:‬‬

‫;‪bool variable=false‬‬
‫) ‪if( variable‬‬
‫{‬
‫;)" ‪Console.WriteLine(" C#‬‬
‫}‬

‫جملة الشرط تلمائٌا تكون بهذا الشكل (‪ )variable == true‬عندما ٌكون المتؽٌر من‬
‫النوع ( ‪ ) bool‬لو لم نكتب لٌمة ‪ true‬أو ‪ false‬فً الشرط‪.‬‬

‫وإذا أردنا النفً فً جملة الشرط نضع عالمة تعجب لبل المتؽٌر المراد نفً لٌمته‬

‫( ! )‪.‬‬

‫; ‪bool variable = false‬‬


‫) ‪if( variable‬‬
‫{‬
‫; )" ‪Console.WriteLine(" Hello‬‬
‫}‬

‫فً هذه الحالة لن ٌُنَفذ الكود الذي بداخل الموسٌن ألن ناتج الشرط ‪ true‬والمٌمة التً‬
‫ٌحملها المتؽٌر فً االصل ‪.false‬‬

‫أما إذا أردت أن ٌتم تنفٌذ الكود فً حالة أن المتؽٌر ٌحمل المٌمة ‪ false‬فٌجب أن تكون‬
‫جملة الشرط هكذا‪...‬‬

‫) ‪if( ! variable‬‬

‫أو‬
‫) ‪if( variable == false‬‬

‫٘‪ٙ‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫إذا كتبنا )‪if( true‬‬


‫{‬
‫‪//code‬‬
‫}‬
‫فً هذه الحالة سٌنفذ الكود الذي بداخل ‪ if‬ألننا حددنا أن الشرط صحٌح فً كل الحاالت‪.‬‬

‫‪else‬‬

‫ت ُنَفذّ هذه الجملة عندما ٌكون الشرط الذي فً جملة ‪ if‬خطؤ‪ ،‬لكن إن كان الشرط صحٌحا‬
‫فلن تُنفذ جملة ‪.else‬‬

‫مثال ‪:‬‬

‫;‪int num=5‬‬
‫) ‪if( num == 2‬‬
‫;)"‪Console.WriteLine("this is true‬‬
‫‪else‬‬
‫;)"‪Console.WriteLine("this is false‬‬

‫فً هذه الحالة الشرط خطؤ إذا سٌنفذ جملة ‪else‬‬

‫إذا أردنا كتابة أكثر من سطر داخلها فٌجب وضع لوسٌن } {‪.‬‬

‫‪ٙٙ‬‬
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

) Nested if ( ‫ُجمل شرط متداخلة‬


‫ أو‬if ‫ بداخل‬if ‫ٌمكننا كتابة أكثر من شرط بداخل بعضهم البعض فٌمكننا كتابة أكثر من‬
else ‫ بداخل جملة‬if ‫كتابة‬

:‫مثال‬
int number = 5 ;
if ( number == 2 )
{
// else ‫الشرط خطؤ فلن ٌُنَف ّذ وسٌنفذ ما بداخل‬
Console.WriteLine("this is true");
}
else
{
if ( number > 1 )
{
number += 3 ;
if ( number < 10 )
{
number += 5 ;
}
else
{
number -= 10 ;
}
}
Console.WriteLine(number);
}
// ٖٔ ‫سٌطبع‬

ٙ7
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫معنى هذا الكود أنه ٌفحص لٌمة المتؽٌر أوال فإذا كانت ٕ سٌطبع ‪ this is true‬إذا‬
‫كانت ؼٌر ذلن فإنه ٌدخل إلى ‪ else‬فٌجد بداخلها جملة شرط أخرى وٌفحص المٌمة‬
‫التً بداخل المتؽٌر هل المٌمة أكبر من ٔ؟‬
‫إذا كانت كذلن فٌدخل إلى ‪ if‬وتزٌد لٌمة المتؽٌر بممدار ٖ ثم ٌفحص المتؽٌر مرة أخرى‬
‫هل لٌمته ألل من ٓٔ؟ إذا كانت ألل فٌنفذّ ما بداخلها وتزٌد لٌمة المتؽٌر بممدار ٘ ولو‬
‫لم تكن لٌمته ألل من ٓٔ فلن ٌنفذ جملة ‪ if‬هذه وٌنزل إلى جملة ‪ else‬وتنمص لٌمة‬
‫المتؽٌر بممدار ٓٔ وبعد ذلن ٌطبع لٌمة المتؽٌر فً أول جملة ‪ else‬التً بداخلها كل‬
‫ُجمل الشرط هذه‪.‬‬

‫‪ٙ2‬‬
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

if …..else if

else if ‫ٌمكننا إختبار أكثر من شرط معا من خالل‬

using System;
namespace First_program
{
class Program
{
static void Main( )
{
Console.WriteLine("enter your grade");
int grade = int.Parse(Console.ReadLine( ));
if ( grade == 50 )
Console.WriteLine(" your grade=50");
else if ( grade == 60 )
Console.WriteLine("your grade=60");
else if ( grade == 70 )
Console.WriteLine("your grade=70");
else if ( grade == 80 )
Console.WriteLine("your grade=80");
else if ( grade == 90 )
Console.WriteLine("your grade=90");
else
ٙ9
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫{‬
‫‪Console.WriteLine("you didn't success if‬‬
‫;)"! ‪your grade less than 50‬‬
‫}‬
‫}‬
‫}‬
‫}‬

‫سٌفحص أول متؽٌر ٌُدخله المستخدم فإذا تحمك أول شرط سٌنفذه ولن ٌنفذ أي شًء آخر‬
‫وإذا لم ٌتحمك سٌتجه إلى الشرط الذي ٌلٌه ثم الذي ٌلٌه إال أن ٌتحمك الشرط‪ ،‬إذا كانت‬
‫كل الشروط وكل االحتماالت خطؤ سٌتجه إلى ‪ else‬وٌنفذ ما بداخلها‪.‬‬

‫تمارٌن ‪:‬‬

‫اكتب برنامج ٌفحص الرلم الذي ٌُدخله المستخدم وٌعرض نوع الرلم إذا كان عددا‬
‫زوجٌا أم فردٌا‪.‬‬
‫;‪using System‬‬
‫‪namespace First_program‬‬
‫{‬
‫‪class Program‬‬
‫{‬
‫) (‪static void Main‬‬
‫{‬
‫;)) (‪int number = int.parse(Console.ReadLine‬‬
‫) ‪if( number%2 == 0‬‬
‫{‬
‫;)"‪Console.WriteLine("this number is Even‬‬
‫}‬

‫ٓ‪7‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫‪else‬‬
‫{‬
‫;)"‪Console.WriteLine("this number is Odd‬‬
‫}‬
‫}‬
‫}‬
‫}‬

‫‪Inline Condition‬‬
‫ٌوجد نوع آخر من الجمل الشرطٌة وتكتب فً سطر واحد وتعمل عمل ‪: if‬‬

‫خطؤ ‪ :‬صحٌح ? ( الشرط )‬

‫تُمثل ‪if‬‬ ‫تُمثل ‪else‬‬


‫مثال ‪:‬‬

‫; ‪int x =10‬‬

‫; " ‪( x > 5 && x <20 ) ? " true" : " false‬‬

‫هذا الكود معناه أن فً حالة أن ‪ x‬أكبر من ٘ وألل من ٕٓ أطبع ‪ true‬ما عدا ذلن‬
‫اطبع ‪.false‬‬

‫وٌمكننا إستمبال المٌمة الناتجة من هذه العملٌة فً متؽٌر من نفس نوع البٌانات الخارجة‪،‬‬
‫فً هذا الشرط تكون النواتج من النوع ‪ string‬فٌمكننا إستمبالها فً متؽٌر نوعه ‪string‬‬

‫فٌمكن أن تكون بهذا الشكل ‪:‬‬

‫ٔ‪7‬‬
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

string str = ( x > 5 && x < 20 ) ? " True " : " False " ;

Console.WriteLine( str );

: ‫الناتج‬

True

.str ‫ سٌُخزن بداخل المتؽٌر‬false ‫ أو‬true ‫أٌا كان الناتج‬

.‫ٌمكننا كتابة أي جملة نرٌد تنفٌذها ال ٌشترط جملة طباعة‬

: ٕ ‫مثال‬

int num = 20 ;

num = ( num > 10 && num < 35 ) ? num +5 : num -1 ;

Console.WriteLine( num );

-------------------------------------------

: ‫الناتج‬

25


‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫‪switch‬‬

‫هً جملة شرطٌة ت ُستخدم للتؤكد من ال ُمدخالت ما إذا كانت صحٌحة أم خاطئة مثل ‪if‬‬

‫لكن هنان بعض الفروق البسٌطة بٌنهما ‪:‬‬

‫‪If‬‬ ‫‪Switch‬‬
‫تستطٌع التعامل مع أكثر من عملٌة‬ ‫ال تستطٌع التعامل إال مع عملٌة واحدة‬
‫بداخل الشرط الواحد ‪.‬‬ ‫بداخل الشرط‬
‫ال نستطٌع استخدام == > أو < أو &‬
‫‪ %‬بداخلها فهً محددة ‪.‬‬
‫تكون صعبة فً عملٌات المراءة وفهم‬ ‫تكون سهلة فً عملٌة المراءة والفهم‬
‫الكود فً حالة الشروط الكثٌرة جدا‬ ‫للكود أكثر من ‪if‬‬
‫وعند إستخدام كم كبٌر من االرلام‬
‫للفحص عنها ٌُفضل إستخدام ‪switch‬‬
‫ٌفضل إستخدامها فً حالة العملٌات‬ ‫أسرع من ‪ if‬فً حالة إستخدام االرلام‬
‫البسٌطة والتً ال تحتوي على أشٌاء‬ ‫المحددة النها تتوجه مباشرة إلى‬
‫محددة فهً شمولٌة أكثر ‪ ،‬على ك ٍل‬ ‫الشرط الصحٌح وتنفذه ‪.‬‬
‫هً الشائعة فً اإلستخدام لل ُجمل‬
‫الشرطٌة ‪.‬‬

‫وتكون صٌؽتها بهذا الشكل ‪...‬‬


‫)‪switch( variable‬‬
‫{‬
‫‪ :‬لٌمة ‪case‬‬
‫;‪statement‬‬
‫تستخدم لتولؾ الفحص عندما ٌتحمك ;‪break‬‬
‫الشرط‬
‫‪ :‬لٌمة ‪case‬‬

‫ٖ‪7‬‬
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

statement; ‫الجملة المراد تنفٌذها إذا كان‬


‫الشرط صحٌح‬
break;
default:
‫تنُفذ هذه الجملة فً حالة عدم وجود شرط صحٌح‬
if ‫ فً جملة‬else ‫تُشبه‬
statement;
‫الجملة المراد تنفٌذها إذا كان الشرط صحٌح‬
break;
}

: ‫مثال‬
int x = 10 ;
switch( x )
{
case 5:
Console.WriteLine(" this is number 5 ");
break;
case 3:
Console.WriteLine(" this is number 3 ");
break;
case 10:
Console.WriteLine(" this is number 10 ");
break;
case 2:
Console.WriteLine(" this is number 2 ");
break;
default:


Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

Console.WriteLine(" false ");


break;
}
.‫ فً بعض الحاالت‬break ‫ٌمكننا اإلستؽناء عن كلمة‬

...‫ مثال عند المٌمة كذا أو كذا‬،‫إذا كنا نرٌد الكشؾ عن أكثر من لٌمة فً نفس الحالة‬
.ّ‫نفذ‬

:‫مثال‬

. ً‫ ٌُدخله المستخدم وٌطبع له التمدٌر الكل‬،‫أكتب برنامج للكشؾ عن تمدٌر الطلبة‬


int grade=int.parse(Console.ReadLine());
switch(grade)
{
case 50:
Console.WriteLine("Accepted");
break;
case 65:
Console.WriteLine("Good");
break;
case 76:
Console.WriteLine("Very Good");
break;
case 85:// ‫ال ٌجب كتابة أي كود فً هذه الحالة‬
case 95:
Console.WriteLine("Excellent");
break;

default:
Console.WriteLine("Didn't pass");

‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫;‪break‬‬

‫}‬

‫معنى الكود أن ‪:‬‬

‫فً حالة إذا كان التمدٌر ٓ٘ سٌطبع ممبول وإذا كان ٘‪ 2‬أو ٘‪ 9‬سٌطبع امتٌاز‬

‫هذه الكود ؼٌر منطمً وٌُفض ّل أن ٌُكت َب بـ ‪.if‬‬

‫كان هذا للتوضٌح فمط‪.‬‬

‫لكن فً جملة الـ ‪ٌ default‬جب علٌنا كتابة ‪.break‬‬

‫إذ لم تُكتب فً آخر جملة سٌحدث خطؤ فً الكود‪.‬‬

‫ألن عند عدم كتباتها فهذا معناه أنه فً هذه الحالة أو التً تلٌها "إذا كان الشرط صحٌح"‬
‫نفذّ‪ .‬فٌحدث خطؤ ألنه ٌتولع وجود حالة بعدها ٌكشؾ عنها ‪ ،‬فكٌؾ ٌُنفذ وال توجد حالة‬
‫بعدها؟!‬

‫إذا فال ٌجوز تجاهلها وٌجب كتابتها فً آخر جملة‪.‬‬

‫‪7ٙ‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫حلمات التكرار‬
‫( ‪) Loop Statements‬‬

‫هً عبارة عن تكرار جزء معٌن من الكود لعدد معٌن من المرات‪ ،‬وهً مهمة جدا‬
‫النها توفر الولت والمجهود‪ ،‬تنفٌذ هذه الجملة ٌعتمد على شرط وطالما الشرط ٌتحمك‬
‫فهً ت ُنَفَذّ وتنتهً ثم تبدأ مرة أخرى إلى أن تصل إلى نهاٌة الشرط‪ ،‬وٌتم إستخدامها عن‬
‫طرٌك بعض ال ُجمل التً تستخدم فً عملٌة التكرار‪.‬‬

‫إحدى أشكال الحلمات هً ‪:‬‬

‫‪while‬‬

‫وتكون جملة التكرار بالشكل التالً ‪:‬‬

‫) شرط ( ‪while‬‬

‫{‬

‫الكود المراد تكراره‬

‫}‬

‫ومعنى الكود أنه طالما أن هذا الشرط ٌتحمك ن ِفذّ‪.‬‬

‫مثال ‪:‬‬
‫‪77‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫;‪using System‬‬
‫‪namespace First_program‬‬
‫{‬
‫‪class Program‬‬
‫{‬
‫) (‪static void Main‬‬
‫{‬
‫;‪int i = 1‬‬
‫) ‪while( i < 10‬‬
‫{‬
‫;) ‪Console.WriteLine( i‬‬

‫لكن إذا كتبناها بدون عملٌة الزٌاده فستظل تعمل بدون تولؾ ألن الشرط دائما صحٌح‬
‫طالما المٌمة لن تتؽٌر‪ ،‬وستكون حلمة ال نهائٌة ‪.‬‬
‫فٌجب أن نزود لٌمة المتؽٌر بالممدار الذي نرٌده‪ ،‬فمثال إذا لولنا‬
‫‪ i++‬سٌزٌد بممدار ٔ‬
‫‪ i+=2‬سٌزٌد بممدار ٕ‬
‫‪ i+=3‬سٌزٌد بممدار ٖ‬
‫وهكذا‪....‬‬
‫}‬
‫}‬
‫}‬
‫}‬
‫لنكتبه بصورة صحٌحة ‪:‬‬
‫;‪using System‬‬
‫‪namespace First_program‬‬
‫{‬
‫‪class Program‬‬
‫{‬

‫‪72‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫) (‪static void Main‬‬


‫{‬
‫;‪int i = 1‬‬
‫) ‪while( i < 10‬‬
‫{‬
‫; ) ‪Console.Write( i‬‬
‫;‪i++‬‬
‫}‬
‫}‬
‫}‬
‫}‬
‫سٌطبع ‪:‬‬

‫‪1 2 3 4 5 6 7 8 9‬‬

‫ثم سٌتولؾ عمل الحلمة ألنها وصلت لنهاٌة الشرط‪ ،‬حٌث أن الشرط لن ٌتحمك ألن ٓٔ‬
‫لٌست ألل من ٓٔ عندها سٌتولؾ الشرط وتتولؾ حلمة التكرار‪.‬‬

‫ٌمكننا وضع الشرط الذي نرٌده وبالزٌادة التً نرٌد وكتابة أي كود بداخل جملة التكرار‬
‫وسٌتم تنفٌذه طالما أن الشرط صحٌح‪.‬‬

‫إذا تتكون جملة التكرار من ‪:‬‬

‫لٌمة إبتدائٌة للمتؽٌر ‪ ( while +‬الشرط ) ‪ +‬ممدار الزٌادة ( العداد )‪.‬‬

‫تمارٌن ‪:‬‬

‫أكتب برنامج ٌطبع حروؾ الهجاء من ‪Z : A‬‬

‫;‪using System‬‬
‫‪namespace First_program‬‬
‫{‬

‫‪79‬‬
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

class Program
{
static void Main( )
{
char alphapet = 'A';
while( alphapet<= 'Z' )
{
Console.WriteLine(alphapet);
alphapet++;
}
}
}
}
: ‫أو ٌمكننا كتابتها بهذا الشكل‬
using System;
namespace First_program
{
class Program
{
static void Main( )
{
char alphapet = 65;
while(alphapet<= 90)
{
Console.WriteLine(alphapet);
alphapet++;
}
}
}
}


‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫هذا فً حالة إذا أردنا حروؾ الهجاء فً حالة الحروؾ الكبٌرة أما إذا أردناها فً حالة‬
‫الحروؾ الصؽٌرة سنبدأ بـ ‪ 97‬ونضع الشرط ألل من أو ٌساوي ٕٕٔ‪.‬‬

‫سٌكون الناتج ‪:‬‬

‫‪a‬‬

‫‪b‬‬

‫‪.‬‬

‫‪.‬‬

‫‪z‬‬

‫‪do….while‬‬

‫وجملة التكرار هذه تختلؾ عن السابمة فً أنها تنفذ الكود الذي بداخلها أوال بعد ذلن‬
‫تفحص الشرط وتتؤكد ما إذا كان صحٌحا أم خطؤ حتى إذا كان الشرط ؼٌر صحٌح فإنها‬
‫تنفذ الكود مرة واحدة فمط على األلل‪.‬‬

‫وتكون بالشكل التالً‪:‬‬


‫;‪using System‬‬
‫‪namespace First_program‬‬
‫{‬
‫‪class Program‬‬
‫{‬
‫) (‪static void Main‬‬
‫{‬
‫;‪int i = 1‬‬
‫‪do‬‬

‫ٔ‪2‬‬
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

{
Console.WriteLine( i );
i++;
}
while( i < 10 ) ;
}
}
}
: ‫إذا تتكون جملة التكرار هذه من‬
.) ‫ ( الشرط‬while + ) ‫ ممدار الزٌادة ( العداد‬+ do + ‫لٌمة إبتدائٌة للمتؽٌر‬
: ‫تمارٌن‬

‫أكتب برنامج ٌؤخذ األرلام والرموز والحروؾ وٌطبع الرلم العشري الممابل لها فً الـ‬
.ascii

using System ;
namespace ConsoleApplication1
{
class Program
{
static void Main( )
{
char check ;
do
{
Console.Write( " enter character : " ) ;
check = char.Parse( Console.ReadLine( ) ) ;
int decim = check ;
Console.WriteLine( decim ) ;
}
while ( true ) ;
}
}
}


‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫‪for‬‬

‫هً شكل من أشكال حلمات التكرار وهً الشائعة فً اإلستخدام‪.‬‬

‫وتكون بهذا الشكل ‪:‬‬

‫( ممدار الزٌادة أو العداد ; الشرط ; لٌمة إبتدائٌة للعداد ) ‪for‬‬

‫وتُكتب الجملة فً سطر واحد بخالؾ الجمل السابمة التً كانت ٌُكتب كل جزء منها فً‬
‫مكان مختلؾ فً الكود‪.‬‬

‫ت ُستخدم فً ال ُجمل التً نعرؾ عدد مرات تكرارها‪ ،‬فٌفضل إستخدامها‪.‬‬

‫والفرق بٌنها وبٌن ‪while‬‬

‫‪ while‬تستخدم عندما ال نعرؾ عدد مرات التكرار‪.‬‬

‫مثال‪:‬‬
‫;‪using System‬‬
‫‪namespace First_program‬‬
‫{‬
‫‪class Program‬‬
‫{‬
‫) (‪static void Main‬‬
‫{‬
‫;‪bool question=true‬‬
‫;‪int choice‬‬
‫)‪while(question==true‬‬
‫ٌمكننا اإلستؽناء عن ( ‪// ) ==true‬‬
‫النها تلمائٌا تكون ‪ true‬فً الشرط إذا لم نؽٌرها بـ ‪false‬‬
‫{‬

‫ٖ‪2‬‬
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

choice=int.parse(Console.ReadLine());
switch(choice)
{
case 1:
statement;
break;
case 2:
statement;
break;
case 3:
statement;
break;
default:
question=false;
break;
}
}
}
}
}
‫ لتوضٌح الفرق بٌنهما‬for ‫مثال على‬

using System;
namespace First_program
{
class Program
{
static void Main( )
{
for( int number=1 ; number<=10 ; number++ )
{


Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

Console.WriteLine(number);
}
}
}
}

ٔٓٓ ‫أكتب برنامج لجمع االرلام من ٔ إلى‬


using System;
namespace First_program
{
class Program
{
static void Main( )
{
int sum = 0;
for( int number=1 ; number<=100 ; number++ )
{
sum += number;
}
Console.WriteLine( sum );
}
}
}
٘ٓ٘ٓ ‫سٌطبع‬

‫ وتكون حلمات متداخلة وٌمكننا إستخدام‬،‫وٌمكننا إستخدام بداخلها جملة تكرار أخرى‬
.‫ إذا أحتجنا إلٌها‬if ‫بداخلها جملة‬


‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫ٌمكننا أٌضا كتابة جملة ‪ for‬بهذا الشكل‬

‫بشرط أن نكتب المٌمة اإلبتدائٌة والشرط والعداد بداخلها وٌمكنا كتابة المٌمة اإلبتدائٌة‬
‫فولها‪ ،‬وإذا لم نكتب شًء وتركناها هكذا فستكون حلمة ال نهائٌة ال تتولؾ‪.‬‬

‫) ; ; (‪for‬‬

‫مثال‪:‬‬

‫أكتب برنامج ٌبحث عن رلم ٌدخله المستخدم من بٌن االرلام من ٔ إلى ٓٓٓٔ إذا وجده‬
‫ٌطبع هذا الرلم‪.‬‬
‫;‪using System‬‬
‫‪namespace First_program‬‬
‫{‬
‫‪class Program‬‬
‫{‬
‫) (‪static void Main‬‬
‫{‬
‫;)) (‪int search = int.Parse(Console.ReadLine‬‬
‫) ‪for( int i = 1 ; i<= 1000 ; i++‬‬
‫{‬
‫) ‪if ( i == search‬‬
‫{‬
‫;)‪Console.WriteLine("the number is "+i‬‬
‫}‬
‫}‬
‫}‬
‫}‬
‫}‬

‫‪2ٙ‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫توجد بعض الكلمات التً تستخدم بداخل جملة التكرار مثل ‪:‬‬

‫‪ : break‬تستخدم إلٌماؾ حلمة التكرار‪.‬‬

‫‪ : continue‬تستخدم لتخطً بعض الخطوات وتجاهلها وعدم تكرارها‪.‬‬

‫مثال ‪:‬‬
‫;‪using System‬‬
‫‪namespace First_program‬‬
‫{‬
‫‪class Program‬‬
‫{‬
‫) (‪static void Main‬‬
‫{‬
‫) ‪for( int i = 1 ; i<=10 ; i++‬‬
‫{‬
‫) ‪if( i == 4‬‬
‫;‪break‬‬
‫;) ‪Console.WriteLine( i‬‬
‫}‬
‫}‬
‫}‬
‫}‬

‫عندما تكون لٌمة المتؽٌر بـ ٗ سٌخرج من حلمة التكرار ولن ٌكمل وسٌطبع فمط‪...‬‬

‫ٔ‬

‫ٕ‬

‫ٖ‬

‫‪27‬‬
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

..‫أما إذا كتبنا‬


using System;
namespace First_program
{
class Program
{
static void Main( )
{
for( int i = 1 ; i<=10 ; i++ )
{
if( i==4 )
continue;
Console.Write( i );
}
}
}
}

: ‫هنا سٌتجاهل هذه الخطوه وسٌتخطاها وٌطبع‬

1 2 3 5 6 7 8 9 10

‫ لكن ٌجب أن تكون بداخل حلمة‬if ‫ وتُكتب أٌضا مع‬switch ‫ تُكتب مع‬break ‫إذا كلمة‬
.‫تكرار‬

22
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫‪ ( Nested for‬حلمات تكرار ُمتداخلة )‬

‫تُكت َب ‪ for‬بداخل ‪for‬‬

‫سنفهم معناها وكٌفٌة عملها بمثال‪.‬‬

‫مثال ‪:‬‬

‫أطبع جدول الضرب من ٔ إلى ٕٔ‬


‫;‪using System‬‬
‫‪namespace First_program‬‬
‫{‬
‫‪class Program‬‬
‫{‬
‫) (‪static void Main‬‬
‫{‬
‫) ‪for( int i = 1 ; i<=12 ; i++‬‬
‫{‬
‫) ‪for( int j = 1; j<=12 ; j++‬‬
‫{‬
‫;) ‪Console.WriteLine( i * j‬‬
‫}‬
‫}‬
‫}‬
‫}‬
‫}‬
‫فً هذا الكود سٌدخل بداخل أول ‪ for‬عند لٌمة ‪ i = 1‬بعدها سٌجد ‪ for‬أخرى بداخلها‬
‫أٌضا فٌظل ٌنفذ الكود الذي بداخل ‪ for‬الداخلٌة إلى أن تنتهً أي ٌكون الشرط خطؤ ثم‬

‫‪29‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫ٌصعد إلى ‪ for‬األولى ٌزود لٌمة ‪ i‬بممدار ٔ وطالما أن الشرط صحٌح فإنه سٌظل‬
‫ٌكرر هذه العملٌة إلى أن ٌكون شرط ‪ for‬األولى خطؤ‪.‬‬

‫فً المثال السابك ‪:‬‬

‫عندما تكون لٌمة ‪ i=1‬سٌدخل إلى ‪ for‬الثانٌة وتكون لٌمة ‪ j=1‬فٌطبع ناتج ضرب ‪i , j‬‬
‫ثم ٌزود لٌمة ‪ j‬بممدار ٔ فتكون ٕ وٌضرب ‪ i*j‬وهكذا إلى أن تكون لٌمة ‪ j=12‬فٌطبع‬
‫ناتج الضرب ألننا تضمنا فً الشرط ( ألل من أو ٌساوي ) وبعدها تزٌد لٌمة ‪j=13‬‬
‫فٌكون الشرط فً هذه الحالة خطؤ ألن ٖٔ لٌست ألل من أو تساوي ٕٔ‪.‬‬

‫فتتولؾ هذه الحلمة وٌصعد إلى ‪ for‬األولى وتزٌد لٌمة ثم ٌدخل ٌنفذ ٕٔ عملٌة تكرار‬
‫أخرى وٌظل ٌكرر إلى أن تكون لٌمة ‪ i = 13‬حٌنها سٌكون الشرط خطؤ وسٌتولؾ‪.‬‬

‫‪1*1 , 1*2 , 1*3 , 1*4 , 1*5 , 1*6 , 1*7 , 1*8 , 1*9 , 1*10 , 1*11 ,‬‬
‫‪1*12‬‬

‫‪2*1 , 2*2 , 2*3 , 2*4 , 2*5 , 2*6 , 2*7 , 2*8 , 2*9 , 2*10 ,‬‬
‫‪2*11 , 2*12‬‬

‫وهكذا‪....‬‬

‫أي أن كل عملٌة واحدة ألول ‪ for‬تعادلها ٕٔ عملٌة لـ ‪ for‬التً بداخلها فً هذا الكود‪.‬‬

‫ٓ‪9‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫أطبع هذا الشكل ‪:‬‬


‫*‬
‫**‬
‫***‬
‫****‬
‫*****‬
‫******‬

‫سنستخدم ‪ nested for‬لطباعة هذا الشكل‪.‬‬

‫‪ for‬الخارجٌة تعبر عن عدد الصفوؾ و ‪ for‬التً بداخلها تعبر عن عدد األعمدة‪ ،‬فً‬
‫هذا المثال ٌوجد ‪ ٙ‬أعمدة و ‪ ٙ‬صفوؾ‪ ،‬ال ٌشترط أن ٌكون عدد األعمدة ٌساوي عدد‬
‫الصفوؾ‪ .‬نالحظ أن الشكل ٌبدأ بعمود واحد ثم ٌزٌد بممدار ٔ (" * ") فً كل صؾ‬
‫جدٌد‪.‬‬
‫;‪using System‬‬
‫‪namespace First_program‬‬
‫{‬
‫‪class Program‬‬
‫{‬
‫) (‪static void Main‬‬
‫{‬
‫) ‪for( int i = 1 ; i<=6 ; i++‬‬
‫{‬
‫) ‪for( int j = 1 ; j<= i ; j++‬‬
‫{‬
‫;) "*" (‪Console.Write‬‬
‫}‬
‫;) (‪Console.WriteLine‬‬
‫}‬
‫}‬
‫}‬
‫}‬

‫ٔ‪9‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫فً ذلن المثال حددنا له الشرط فً جملة التكرار الثانٌة أال تتكرر إال إذا كان عدد‬
‫األعمدة ألل من أو ٌساوي عدد الصفوؾ‪ ،‬فمثال الصؾ األول ٌطبع نجمة واحدة‬
‫والصؾ الثانً ٌطبع نجمتٌن وفً الصؾ الثالث ٌطبع ثالث نجوم وهكذا إلى أن تتولؾ‬
‫حلمة التكرار الخارجٌة‪.‬‬

‫أثناء الطباعه نجعل األعمدة تُطبع بجانب بعضها حتى ٌخرج لً هذا الشكل أي أننا ال‬
‫نطبع فً دالة ) (‪ WriteLine‬بل نطبع داخل الحلمة الخاصة باألعمدة بـ ) (‪ Write‬فمط‬
‫وعندما ٌُنهً الشرط فً الحلمة الخاصة باألعمدة ٌخرج منها فٌجد دالة ) (‪WriteLine‬‬
‫كً ٌنزل إلى صؾ جدٌد ألن هذا الصؾ لد أنتهى‪.‬‬

‫مثال آخر ‪:‬‬

‫أطبع هذا الشكل ‪.‬‬


‫******‬
‫*****‬
‫****‬
‫***‬
‫**‬
‫*‬
‫نالحظ أن عدد األعمدة مكتمل ثم ٌنمص بممدار ٔ مع كل صؾ جدٌد‪.‬‬

‫ٌمكننا كتابة الكود بؤكثر من طرٌمة فمثال ٌمكننا كتابته بهذا الشكل ‪...‬‬
‫;‪using System‬‬
‫‪namespace First_program‬‬
‫{‬
‫‪class Program‬‬
‫{‬
‫) (‪static void Main‬‬
‫{‬
‫) ‪for( int i = 1 ; i<=6 ; i++‬‬
‫{‬
‫ٕ‪9‬‬
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

for( int j=i; j<= 6 ; j++ )


{

Console.Write( "*" );

Console.WriteLine( );

}
}
}
}

...‫أو بتلن الطرٌمة‬


using System;
namespace First_program
{
class Program
{
static void Main( )
{
for( int i = 1 ; i<= 6 ; i++ )
{
for( int j = 6 ; j>= i ; j - - )
{
Console.Write( "*" );
}
Console.WriteLine( );
}
}
}
}


‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫مثال ‪:‬‬

‫أطبع هذا الشكل ‪...‬‬


‫*‬
‫* *‬
‫***‬
‫****‬
‫*****‬
‫******‬
‫*******‬
‫********‬

‫فً هذا الشكل نحتاج إلى طباعة مسافات على الجانب األٌسر أوال ونالحظ أن هذه‬
‫المسافات تمل بممدار ٔ مع كل صؾ جدٌد‪ ،‬إذا سنطبع مسافات وأعمدة وصفوؾ‪،‬‬
‫سنحتاج إلى ‪ for‬للصفوؾ بداخلها حلمتٌن تكرار أحدهما للمسافات واألخرى لألعمدة‪.‬‬

‫;‪using System‬‬
‫‪namespace First_program‬‬
‫{‬
‫‪class Program‬‬
‫{‬
‫) (‪static void Main‬‬
‫{‬
‫) ‪for( int i = 1 ; i<=8 ; i++‬‬
‫{‬
‫) ‪for( int k = 1 ; k<=8 –i ; k++‬‬
‫{‬
‫;) " " (‪Console.Write‬‬
‫}‬
‫) ‪for( int j = 1 ; j<=i ; j++‬‬
‫{‬

‫ٗ‪9‬‬
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

Console.Write( "*" );

Console.WriteLine( );

}
}
}
}

: ‫مثال‬

...‫أطبع هذا الشكل‬


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

. ‫هو نفس المثال السابك لكننا سنضاعؾ عدد النجوم فمط‬

using System;
namespace First_program
{
class Program


Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

{
static void Main( )
{
for( int i = 1 ; i<=8 ; i++ )
{
for( int k = 1 ; k<=8 - i ; k++ )
{
Console.Write( " " );
}
for( int j = 1; j<= i*2-1 ; j++ )
{
Console.Write( "*" );
}
Console.WriteLine( ); /*
‫* لكً ٌنزل إلى سطر جدٌد مع نهاٌة كل صؾ لد أكتملت دورته‬/
}
}
}
}


Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

: ‫مثال‬

...‫أطبع هذا الشكل‬


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

using System;
namespace First_program
{
class Program
{
static void Main( )
{
for( int i = 1 ; i<=12 ; i++ )
{
for( int k = 1 ; k < =12 - i ; k++ )
{
Console.Write( " " );
}

97
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫) ‪for( int j = 1; j < = i*2-1 ; j++‬‬


‫{‬
‫;) "*" (‪Console.Write‬‬
‫}‬
‫;) (‪Console.WriteLine‬‬
‫}‬
‫) ‪for( int i = 8 ; i<=12 ; i++‬‬
‫{‬
‫) ‪for( int k = 1 ; k < =12 - i ; k++‬‬
‫{‬
‫;) " " (‪Console.Write‬‬
‫}‬
‫) ‪for( int j = 1 ; j< = i*2-1 ; j++‬‬
‫{‬
‫;) "*" (‪Console.Write‬‬
‫}‬
‫;) (‪Console.WriteLine‬‬
‫}‬
‫}‬
‫}‬
‫}‬

‫فً هذا المثال أردنا طباعة مثلث متساوي السالٌن لذا ضاعفنا األعمدة‪ ،‬فجعلنا حلمة‬
‫التكرار الخاصة باألعمدة تدور إلى ضعؾ عدد الصفوؾ‪ .‬ثم أنمصنا منها ٔ لٌكون‬
‫رأس المثلث نجمة واحدة ولٌست ٕ‪.‬‬

‫ثم بدأنا من منتصؾ الصفوؾ بعدما أنتهٌنا من المثلث متساوي السالٌن لتتكون الشجرة‪.‬‬

‫هذه األمثلة فمط لتجعلن متمكن من إستخدام حلمات التكرار بداخل بعضها‪.‬‬

‫‪92‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫‪foreach‬‬

‫تستخدم أٌضا للتكرار لكن هذه الجملة تستخدم فً حالة وجود مجموعة من البٌانات‬
‫المرتبطة معا و ُمخزنة معا بداخل ُم َج َّمع من البٌانات مثل المصفوفة " ‪." Array‬‬

‫وٌكون تعرٌفها بهذا الشكل ‪:‬‬

‫( المصفوفة أو مجموعة البٌانات ‪ +‬الكلمة المحجوزة ‪ + in‬نوع البٌانات ) ‪foreach‬‬

‫) ‪foreach( DataType variable in data‬‬

‫} ; ‪{ code‬‬

‫مثال‪:‬‬
‫;‪using System‬‬
‫‪namespace First_program‬‬
‫{‬
‫‪class Program‬‬
‫{‬
‫) (‪static void Main‬‬
‫{‬
‫; } ‪int[ ]arr = new int[ 5 ] { 1 , 2 , 3 , 4 , 5‬‬
‫) ‪foreach( int i in arr‬‬
‫{‬
‫;) ‪Console.WriteLine( i‬‬
‫}‬
‫}‬
‫}‬
‫}‬

‫هذا مجرد مثال للتوضٌح فمط وسؤشرح المصفوفات الحما‪.‬‬


‫‪99‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫المصفوفات‬
‫( ‪) Arrays‬‬

‫(المصفوفة االحادٌة أو الفردٌة )‬

‫المصفوفة عبارة عن مجموعة من المتؽٌرات وتكون من نفس نوع البٌانات وتكون‬


‫متتالٌة فً الذاكرة‪ ،‬أي أنها تحجز خالٌا متتالٌة فً الذاكرة المإلتة (‪ ) RAM‬وٌكون‬
‫عنوان هذه الخالٌا متتابع فً الذاكرة‪ ،‬وٌكون لها حجم ثابت أي أننا ٌجب أن نحدد عدد‬
‫العناصر التً سنحتاج استخدامها‪ ،‬فائدة المصفوفة أنها تمكننا من التعامل مع أكثر من‬
‫عنصر فً نفس الولت ونُع ِد َّل ونؽٌر من لٌمته وتحدث علٌه أي عملٌة بطرٌمة سهلة‬
‫جدا وبسٌطة‪ٌ ،‬مكننا أن نؽٌر لٌمة آالؾ البٌانات فً سطر واحد‪ ،‬وذلن بإستخدام‬
‫المصفوفة‪.‬‬

‫تعرٌؾ المصفوفة ٌكون بالشكل التالً ‪:‬‬

‫; [ حجم المصفوفة ] ‪ +‬نوع البٌانات ‪ = new +‬اسم المصفوفة [ ] نوع البٌانات ‪.‬‬

‫;] ‪Data Type + [ ] + Array_Name =new DataType [ size‬‬

‫ٌجب أن نحدد حجم المصفوفة أثناء التعرٌؾ‪ ،‬وكل عنصر هو عبارة عن متؽٌر بداخل‬
‫المصفوفة‪.‬‬

‫أُضٌفت كلمة ‪ new‬بداخل السً شارب وهً تعبر عن أن المصفوفة دٌنامٌكٌة أي‬
‫ٌجوز تؽٌٌر حجمها‪ ،‬فعند تؽٌٌر حجمها تؤخذ نسخة من المصفوفة المدٌمة وتنشًء‬

‫ٓٓٔ‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫مصفوفة جدٌدة بنفس الحجم الذي حددته‪ ،‬حٌث أن المصفوفة سابما كانت حجمها ثابت‬
‫ؼٌر لابل للتعدٌل‪ ،‬أما حالٌا ٌجوز تؽٌٌر حجمها متى أردنا‪.‬‬

‫لكً نشٌر إلى عنصر معٌن بداخل المصفوفة نكتب اسم المصفوفة وموضع العنصر‬
‫بداخل المصفوفة‪ ،‬نكتب موضع العنصر بداخل لوسٌن ] [‪.‬‬

‫وٌبدأ ترلٌم المصفوفة من صفر حٌث ٌكون أول عنصر فً المصفوفة ترلٌمه صفر‪.‬‬

‫مثال ‪:‬‬

‫;‪int [ ] arr = new int *10+‬‬

‫وٌمكن أن تؤخذ حجم المصفوفة من المستخدم بالطرٌمة العادٌة‪.‬‬

‫; ) ) (‪int size = int.Parse(Console.ReadLine‬‬

‫;] ‪int [ ] arr = new int[ size‬‬

‫معنً هذه الجملة أننا أنشؤنا مصفوفة بداخلها عشرة عناصر (متؽٌرات)‬
‫من النوع (‪ ،)int‬وٌمكننا إجراء أي عملٌة علٌهم‪ ،‬جمع أو طرح أو لسمة أو ضرب أو‬
‫أي عملٌة‪ٌ ،‬مكننا أن نعطً لعناصر المصفوفة لٌم إبتدائٌة بهذه الطرٌمة‪...‬‬
‫; ‪int * + arr = new int *10+ , 1 , 4 , 12 , 65 , 14 , 16 -‬‬

‫أو بهذه الطرٌمة مباشرة ‪..‬‬

‫; ‪int [ ] arr=, 1 , 4 , 12 , 65 , 14 , 16 -‬‬

‫سٌضع هذه المٌم فً أول ‪ ٙ‬خالٌا من المصفوفة‪ ،‬أما بالً العناصرمن المصفوفة‬
‫سٌضع لها لٌمة إفتراضٌة صفر‪.‬‬

‫ٔٓٔ‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫‪arr*0+‬‬ ‫‪1‬‬

‫‪arr*1+‬‬ ‫‪4‬‬

‫]‪arr*2‬‬ ‫‪12‬‬

‫‪arr*3+‬‬ ‫‪65‬‬

‫‪arr*4+‬‬ ‫‪14‬‬

‫‪arr*5+‬‬ ‫‪16‬‬

‫‪arr*6+‬‬ ‫‪0‬‬

‫‪arr*7+‬‬ ‫‪0‬‬

‫‪arr*8+‬‬ ‫‪0‬‬

‫‪arr*9+‬‬ ‫‪0‬‬

‫دائما ما ٌكون موضع آخر عنصر فً المصفوفة = حجم المصفوفة ‪ٔ -‬‬

‫مثال ‪:‬‬

‫إذا أردنا إجراء عملٌة جمع على العنصر الخامس فً المصفوفة ونضٌؾ على لٌمة‬
‫العنصر المٌمة ٕٓ‪ ،‬إذا سٌكون العنصر رلم ٗ ألن المصفوفة تبدأ بصفر‪.‬‬

‫فتحدث العملٌة بالشكل التالً‪...‬‬

‫; ‪arr* 4 + += 20‬‬

‫وٌمكننا أٌضا إضافة عنصر بداخل المصفوفة إلى عنصر آخر بداخلها‬

‫أو نسخ لٌمة عنصر إلى عنصر آخر‬

‫ٕٓٔ‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫مثال‪:‬‬

‫;‪arr*2+ = arr*1+‬‬

‫معنى هذه الجملة أن لٌمة العنصر الثانً فً المصفوفة نُ ِس َخت فً العنصر الثالث‪،‬‬
‫وأصبحت لٌمة العنصر الثالث بنفس لٌمة العنصر الثانً‪.‬‬

‫;‪arr*5+ += arr*2+‬‬

‫فً هذه الجملة أ ُضٌفت لٌمة العنصر الثالث إلى لٌمة العنصر السادس و ُوضع ناتج‬
‫الجمع بداخل العنصر السادس‪.‬‬

‫;‪arr*3+ /= arr*4+‬‬

‫فً هذه الجملة لَ َ‬


‫س َم لٌمة العنصر الرابع على العنصر الخامس ووضع ناتج المسمة‬
‫بداخل العنصر الرابع‪.‬‬

‫;‪int sum = arr*2++arr*4+‬‬

‫ووضع ناتج الجمع بداخل المتؽٌر‬


‫ُج ِم َعت لٌمة العنصر الخامس مع لٌمة العنصر الثالث ُ‬
‫‪.sum‬‬

‫‪ arr*0+‬موضع العنصر االول فً المصفوفة‪.‬‬

‫‪ arr*1+‬موضع العنصر الثانً فً المصفوفة‪.‬‬

‫‪ arr*2+‬موضع العنصر الثالث فً المصفوفة‪.‬‬

‫وهكذا ‪...‬‬

‫نستطٌع تؽٌٌر حجم المصفوفة بهذه الطرٌمة‪...‬‬

‫نفترض أننا أنشؤنا مصفوفة بهذه الطرٌمة ونرٌد تؽٌٌر مساحتها ‪:‬‬

‫;‪int [ ] numbers = new int * 10 +‬‬


‫ٖٓٔ‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫ٌحدث التعدٌل بهذا الشكل ‪:‬‬

‫; ) ‪Array.Resize( ref numbers , 20‬‬

‫كلمة ‪ Array‬هً عبارة عن ‪ٌ class‬حتوي بداخله على دالة تستطٌع إعادة تعٌٌن حجم‬
‫المصفوفة فتنسخ محتوى المصفوفة المدٌمة وتُدخله فً المصفوفة الجدٌدة‪ ،‬حٌث تنشًء‬
‫مصفوفة جدٌدة بالحجم الجدٌد‪.‬‬

‫‪ : Resize‬هً دالة التعدٌل وإعادة تعٌٌن حجم المصفوفة‪ ،‬وهً دالة جاهزة فً اللؽة‪.‬‬

‫‪ : ref‬هً اختصار لـ ‪ reference‬ومعناها أن هذه التؽٌٌر سٌحدث فعلٌا فً هذا المكان‬


‫بداخل الذاكرة ( ‪.) RAM‬‬

‫نمرر لهذه الدالة اسم المصفوفة والحجم الجدٌد‪.‬‬

‫وٌتم التعامل مع العناصر داخل المصفوفة من خالل حلمات التكرار ‪ for‬أو ‪foreach‬‬
‫أو ‪.while‬‬

‫مثال ‪:‬‬

‫ضع لٌم أولٌة بداخلها ثم اطبع هذه المٌم‪.‬‬


‫أنشًء مصفوفة مكونة من ٓٔ أرلام و ْ‬
‫; ‪using System‬‬
‫‪namespace First_program‬‬
‫{‬
‫‪class Program‬‬
‫{‬
‫) (‪static void Main‬‬
‫{‬
‫‪int [ ] num=new int[ 10 ] { 11 ,2 , 3 , 4 , 5 ,‬‬
‫; } ‪12 , 14 , 16 , 17 , 9‬‬
‫) ‪for( int counter = 0 ; counter<num.Length ; counter++‬‬

‫ٗٓٔ‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫{‬
‫;) ] ‪Console.WriteLine( num[ counter‬‬
‫}‬
‫}‬
‫}‬
‫}‬
‫‪ : length‬هً خاصٌة تُرجع أو تحسب لنا حجم المصفوفة‪ ،‬كان من الممكن أن نكتب‬
‫المساحة بشكل مباشر لكن من المفضل أن نكتب الجملة بهذا الشكل حتى إذا تؽٌرت‬
‫المساحة فلن نضطر إلى تؽٌٌرها فً كل الشروط المتعلمة بهذه المصفوفة‪ ،‬فهذه‬
‫الخاصٌة تحسبها تلمائٌا‪ .‬وسنعرؾ ماهً الخصائص فٌما بعد‪.‬‬

‫أو ٌمكننا إستخدام ‪ foreach‬فهً أبسط فً الكتابة من ‪ for‬وتؤتً بنفس النتٌجة‪.‬‬

‫)‪foreach ( int count in num‬‬

‫; ) ‪Console.WriteLine( count‬‬

‫أنشؤنا عداد لكً ٌدور على عناصر المصفوفة‪ ،‬ثم ٌطبع محتوى المصفوفة‪.‬‬

‫مثال ‪:‬‬

‫أنشًء مصفوفة مكونة من ‪ 15‬عنصر وأجعل المستخدم ٌدخل لٌم لهذه العناصر‪ ،‬ثم‬
‫أضؾ المٌمة ‪ 5‬إلى لٌمة العنصر العاشر وأطبع كل لٌم العناصر‪.‬‬

‫;‪using System‬‬
‫‪namespace First_program‬‬
‫{‬
‫‪class Program‬‬
‫{‬
‫) (‪static void Main‬‬
‫{‬
‫٘ٓٔ‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫;‪int [ ] num = new int*15+‬‬


‫) ‪for( int counter = 0 ; counter<num.Length ; counter++‬‬
‫{‬
‫;))‪num[counter]=int.Parse(Console.ReadLine‬‬
‫}‬
‫) ‪for( int counter = 0 ; counter<num.Length ; counter++‬‬
‫{‬
‫) ‪if ( num*counter+==10‬‬
‫;‪num*counter++=5‬‬
‫}‬
‫) ‪for( int counter = 0 ; counter<num.Length ; counter++‬‬
‫{‬
‫;) ]‪Console.WriteLine( num[counter‬‬
‫}‬
‫}‬
‫}‬
‫}‬

‫مالحظة— ال ٌجوز أن تبدأ العداد بصفر وأن تجعله ٌزٌد بممدار ٔ ثم تكتب فً الشرط‬
‫ألل من أو ٌساوي ( لٌمة حجم المصفوفة )‪ ،‬النن إذا كتبت أو ٌساوي فؤنت تمول أن‬
‫المصفوفة تحتوي على عدد العناصر الموجودة ‪ ٔ+‬وفً هذه الحالة سٌحدث خطؤ ألنن‬
‫إذا بدأت مصفوفة مكونة من ٓٔ عناصر بصفر وانتهٌت بالمٌمة ٓٔ سٌكون عدد‬
‫العناصر ٔٔ ولٌس ٓٔ وسٌحدث خطؤ اثناء ولت التشؽٌل‪ٌ ،‬جب أن تبدأ بصفر وتنتهً‬
‫بـ ‪9‬‬

‫) خطؤ ( ‪counter < = num.Length---------------x‬‬

‫‪ٔٓٙ‬‬
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

: ‫تمارٌن‬

‫ أي أن تجعل العنصر األخٌر‬،‫ادخل ٓٔ عناصر فً مصفوفة ثم اعكس هذه المصفوفة‬


.‫ٌكون فً ممدمة المصفوفة والعنصر األول ٌنتمل إلى آخرها‬
using System;
namespace First_program

class Program
{

static void Main( )


{
int * + arr=new int*10+;
for( int counter = 0 ; counter<arr.Length ; counter++ )

{
arr[counter]=int.Parse(Console.ReadLine));
}

for( int counter = 0 ; counter<arr.Length/2 ; counter++ )


{
int temp;
temp = arr[counter];
arr[counter] = arr[arr.Length-1-counter];
arr[arr.length-1-counter] = temp;
}
}
}
}
ٔٓ7
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫فكرة البرنامج أننا سنجري عملٌة تبدٌل بٌن كل عنصرٌن متمابلٌن‪ ،‬وسنظل نُ ِ‬
‫جري هذه‬
‫العملٌة إلى أن نصل إلى منتصؾ المصفوفة‪ ،‬أي أنه ستحدث عملٌة التبدٌل ‪ 5‬مرات‬
‫ولٌس ‪ 10‬ألننا لو أجرٌنا عملٌة التبدٌل ‪ 10‬مرات سترجع المصفوفة إلى ما كانت علٌه‬
‫فً السابك‪.‬‬

‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪4‬‬ ‫‪5‬‬ ‫‪6‬‬ ‫‪7‬‬ ‫‪8‬‬ ‫‪9‬‬ ‫‪10‬‬

‫ٔ مع ٓٔ‬

‫ٕ مع ‪9‬‬

‫ٖ مع ‪2‬‬

‫ٗ مع ‪7‬‬

‫٘ مع ‪ٙ‬‬

‫لو جعلنا الـ ‪ for‬تدور إلً ما بعد منتصؾ المصفوفة فإنها ستبدلهم مرة أخرى‪.‬‬

‫لكن ماذا لو كان طول المصفوفة عددا فردٌا مثل ‪11‬؟‬

‫لن ٌإثر ذلن فً شًء ألن النوع ‪ int‬ال ٌمبل إال أعداد صحٌحة فخارج المسمة سٌكون‬
‫عدد صحٌح وسٌتجاهل االعداد العشرٌة فناتج لسمة ‪ 12‬على ‪ٌ 2‬ساوي ‪ ،5‬وسٌكون فً‬
‫منتصؾ المصفوفة رلم على ٌمٌنه ‪ 5‬أرلام وعلى ٌساره ‪ 5‬أرلام‪ ،‬سنبدل الٌمٌن بالٌسار‬
‫والمنتصؾ لن ٌتؤثر ألنه فً كل الحاالت سٌظل فً المنتصؾ‪.‬‬

‫‪ٔٓ2‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫مثال ‪:‬‬

‫ٓ ‪ٖ- ٕ- ٔ-‬‬ ‫ٔ‬ ‫ٖ ٕ‬

‫إذا أردت أن تبدل الثالثة أرلام التً على ٌمٌن الصفر بالثالثة التً على ٌساره‪ ،‬هل‬
‫سٌتؤثر مكان الصفر؟‬

‫الجواب ال‪ ،‬نفس الفكرة لن ٌتؤثر مكان العنصر الذي فً منتصؾ المصفوفة ذات الحجم‬
‫الفردي‪.‬‬

‫وأنشؤنا متؽٌر لٌحمل المٌمة مإلتا حتى تتم عملٌة التبدٌل ووضعنا به أول عنصر ثم‬
‫وضعنا آخر عنصر فً مكان أول عنصر‪ ،‬بعدها وضعنا المٌمة التً بداخل المتؽٌر‬
‫المإلت فً مكان آخر عنصر وهكذا‪.‬‬

‫مثال ٕ‪:‬‬

‫انشًء مصفوفة و أدخل بها ٓٔ عناصر ثم رتب العناصر تصاعدٌا‪.‬‬


‫;‪using System‬‬
‫‪namespace First_program‬‬
‫{‬
‫‪class Program‬‬
‫{‬
‫) (‪static void Main‬‬
‫{‬
‫; ] ‪int [ ] arr = new int[ 10‬‬
‫) ‪for( int i= 0 ; i<arr.Length ; i++‬‬
‫{‬
‫;))‪arr[i]=int.Parse(Console.ReadLine‬‬
‫}‬
‫)‪for( int i = 0 ; i <arr.Length-1 ; i++‬‬
‫{‬
‫)‪for( int j = i ; j <arr.Length ; j++‬‬

‫‪ٔٓ9‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫{‬
‫) ] ‪if( arr[ i ] > arr[ j‬‬
‫{‬
‫;‪int temp‬‬
‫; ] ‪temp = arr[ i‬‬
‫; ] ‪arr[ i ] = arr[ j‬‬
‫; ‪arr[ j ] = temp‬‬
‫}‬
‫}‬
‫}‬

‫}‬

‫}‬

‫}‬

‫فكرة هذا البرنامج أننا نمارن كل عنصر بالذي ٌلٌه فإذا كان ما ٌلٌه ألل منه فإنه سٌب ِدل‬
‫المٌمتٌن ببعضهما‪.‬‬

‫وكما عرفنا‪ ،‬تتم عملٌة التبدٌل بٌن لٌمتٌن عن طرٌك وجود متؽٌر ثالث ٌحمل لٌمة‬
‫أحدهما حتى تتم عملٌة التبدٌل‪.‬‬

‫تمارٌن ‪:‬‬

‫أكتب كود ٌجعل المستخدم ٌبدل بٌن لٌمتٌن من خالل فهرس هذه المٌم فً المصفوفة‪،‬‬
‫المصفوفة مكونة من ٓٔ عناصر‪.‬‬
‫; ‪using System‬‬

‫‪namespace ConsoleApplication‬‬

‫{‬

‫‪class Program‬‬

‫ٓٔٔ‬
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

{
static void Main ( )
{
int [ ] arr = new int * 10 + , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 - ;

int index1 = int.Prase( Console.ReadLine( ) );


int index2 = int.Parse( Console.ReadLine( ) );

int temp ;
for ( int i = 0 ; i < 10 ; i++ )

{
for ( int j = i ; j < 10 ; j++ )
{

if ( i == index1 && j == index2 )


{

temp = arr * index1 + ;


arr * index1 + = arr * index2 + ;

arr * index2 + = temp ;

}
}

}
}

}
}

ٔٔٔ
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫المصفوفة ثنائية االبعاد‬


‫هً شكل من أشكال المصفوفات وٌكون لها بُعدٌن وٌتم التخزٌن بها عن طرٌك إستخدام‬
‫رلم الصؾ والعمود‪.‬‬

‫ٌجب أن تحدد عدد األعمدة والصفوؾ التً بها فمساحتها تساوي عدد الصفوؾ فً عدد‬
‫األعمدة‪.‬‬

‫مثال ‪:‬‬

‫عمود ‪0‬‬ ‫عمود ‪1‬‬ ‫عمود ‪2‬‬

‫‪12‬‬ ‫‪54‬‬ ‫‪6‬‬


‫صؾ ‪0‬‬

‫‪76‬‬ ‫‪23‬‬ ‫‪3‬‬


‫صؾ ‪1‬‬

‫‪4‬‬ ‫‪1‬‬ ‫‪8‬‬


‫صؾ ‪2‬‬

‫هذه المصفوفة تحتوي على ٖ صفوؾ وٖ أعمدة وأٌضا ٌبدأ ترلٌم الصؾ أو العمود من‬
‫صفر‪.‬‬

‫وتتم عملٌة تعرٌؾ المصفوفة بهذا الشكل‪:‬‬

‫;] ‪DataType + [ , ] + name = new DataType [ rows , cols‬‬

‫; ‪int * , + arr = new int * 5 , 4 +‬‬

‫معنى هذا الكود أننا أنشؤنا مصفوفة ثنائٌة اسمها ‪ arr‬وبها ٘ صفوؾ و ٗ أعمدة‪.‬‬

‫ٕٔٔ‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫فمثال إذا أردنا تخزٌن لٌمة فً مكان محدد فً المصفوفة فإننا نحدد مكان الصؾ‬
‫والعمود‪.‬‬

‫مثال ‪:‬‬

‫فً حالة تخزٌن المٌمة ٓٓٔ بداخل هذه المصفوفة‪ ،‬نحدد بؤي صؾ و بؤي عمود‬
‫وبتاللً الصؾ مع العمود نضع المٌمة‪ ،‬تماما كالرسم البٌانً للمحورٌن ( س ‪ ،‬ص )‪.‬‬

‫لنحدد مثال الصؾ الثالث والعمود الثانً‪.‬‬

‫فتكتب بهذا الشكل ‪:‬‬

‫; ‪arr[ 2 , 1 ] = 100‬‬

‫عمود ‪0‬‬ ‫عمود ٔ‬ ‫عمود ٕ‬ ‫عمود ‪3‬‬

‫صؾ ‪0‬‬

‫صؾ ٔ‬

‫صؾ ٕ‬
‫‪100‬‬

‫صؾ ‪3‬‬

‫صؾ ‪4‬‬

‫تتم عملٌة اإلدخال لهذه المصفوفة بتلن الطرٌمة ‪:‬‬

‫سنفرض أن مساحة المصفوفة هً ٗ صفوؾ وٖ أعمدة وسنحفظ بداخلها أسماء‬


‫الطالب‪.‬‬

‫ٖٔٔ‬
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

using System;
namespace First_program
{
class Program
{
static void Main( )
{
string [ , ] arr = new string [ 4 , 3 ] ;

for( int i = 0 ; i<4 ; i++ )


{
for( int j = 0 ; j<3 ; j++ )
{
arr[ i , j ]= Console.ReadLine( );
}
}
}
}
}

‫فً عملٌة تعرٌؾ المصفوفة ٌجب أن نحدد لها عدد الصفوؾ واألعمدة أو أن نؤخذ‬
.‫لٌمتهما من المستخدم‬

: ‫مثال‬
using System;
namespace First_program
{
class Program
{
static void Main( )
{
int row = int.Parse( Console.ReadLine( ) ) ;
int col = int.Parse( Console.ReadLine( ) ) ;

ٔٔٗ
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

string [ , ] arr=new string[ row , col ];


for( int i = 0 ; i< row ; i++ )
{
for( int j =0 ; j< col ; j++ )
{
arr[ i , j ] = Console.ReadLine( );
}
}
}
}
}

: ‫تمارٌن‬

.‫أنشًء مصفوفة ٖ * ٖ لتخزٌن مرتبات موظفٌن ثم أطبع أعلى مرتب وألل مرتب‬
using System;
namespace First_program
{
class Program
{
static void Main( )
{
int row=3;
int col=3;
int max_value = 0 ;
int mini_value ;
int [ , ] arr = new int[ row , col ];
for( int i = 0 ; i< row ; i++ )
{
for( int j = 0 ; j< col ; j++ )

ٔٔ٘
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

{
arr[ i , j ]=int.Parse(Console.ReadLine());
}
}
mini_value = arr[ 0 , 0 ];

// ‫فرضا أن أول لٌمة فً المصفوفة هً ألل لٌمة‬

for( int i = 0 ; i< row ; i++ )


{
for( int j = 0 ; j< col ; j++ )
{

if ( arr[ i , j ] > max_value)

max_value = arr[ i , j ] ;

}
if ( arr[ i , j ] < mini_value)
{
mini_value = arr[ i , j ] ;
}
}
}
Console.WriteLine("the maximum salary="+max_value);
Console.WriteLine("the minimum salary="+mini_value);

ٔٔٙ
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫}‬

‫}‬
‫}‬

‫تمارٌن ‪:‬‬
‫أنشًء مصفوفتٌن مساحتهما ٖ * ٖ ثم أضرب المصفوفتٌن فً بعضهما وخزن ناتج‬
‫الضرب فً مصفوفة جدٌدة‪.‬‬

‫مالحظة ‪:‬‬
‫عند ضرب مصفوفتٌن فإن كل صؾ فً المصفوفة األولى ( ٔ ) ٌُضرب فً كل أعمدة‬
‫المصفوفة الثانٌة ( ٕ )‪.‬‬

‫مصفوفة ٔ‬ ‫مصفوفة ٕ‬

‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪10‬‬ ‫‪11‬‬ ‫‪12‬‬

‫‪4‬‬ ‫‪5‬‬ ‫‪6‬‬ ‫‪X‬‬ ‫‪13‬‬ ‫‪14‬‬ ‫‪15‬‬

‫‪7‬‬ ‫‪8‬‬ ‫‪9‬‬ ‫‪16‬‬ ‫‪17‬‬ ‫‪18‬‬

‫فت ُ َ‬
‫ضرب المصفوفتان بهذه الطرٌمة ‪:‬‬

‫‪1*10+2*13+3*16‬‬ ‫‪1*11+2*14+3*17‬‬ ‫‪1*12+2*15+3*18‬‬

‫‪4*10+5*13+6*16‬‬ ‫‪4*11+5*14+6*17‬‬ ‫‪4*12+5*15+6*18‬‬

‫‪7*10+8*13+9*16‬‬ ‫‪7*11+8*14+9*17‬‬ ‫‪7*12+8*15+9*18‬‬

‫‪ٔٔ7‬‬
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

using System;
namespace ConsoleApplication1
{
class Program
{
static void Main( )
{
int multi = 1 , temp = 0 ;
int [ , ]arr = new int[ 3 , 3 ] ;
int [ , +arr2 = new int[ 3 , 3 ] ;
int [ , +arr3 = new int[ 3 , 3 ] ;
Console.WriteLine("---------Enter values of array 1--------");
for( int i = 0 ; i<3 ; i++ )
{
for( int j = 0 ; j<3 ; j++ )
{
Console.Write(" [ " + i + " , " + j + " ] = ");
arr[ i , j ] = int.Parse(Console.ReadLine( ));
}
}
Console.WriteLine("---------Enter values of array 2--------");
for( int i = 0 ; i<3 ; i++ )
{
for( int j = 0 ; j<3 ; j++ )
{
Console.Write(" [ " + i + " , " + j + " ] = ");
arr2* i , j ] = int.Parse(Console.ReadLine( ));
}
}
for( int k = 0 ; k<3 ; k++ )
{
for( int i = 0 ; i<3 ; i++ )
{
for( int j = 0 ; j<3 ; j++ )
{

ٔٔ2
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

multi = arr[ k , j ] * arr2* j , i ];


temp += multi;
}
arr3* k , i ] = temp;
temp = 0 ;
}
}
Console.WriteLine(" multiplication Result of array1 and
array2 : ");
for( int i = 0 ; i<3 ; i++)
{
for( int j = 0 ; j<3 ; j++ )
{
Console.Write( arr3* i , j ] + "\t" );
}
Console.WriteLine( );
}
}
}
}

: ‫تمارٌن‬
.X O ‫أكتب برنامج بإستخدام المصفوفات لتنفٌذ لعبة‬

X-O

X X O

X O X

O X O

ٔٔ9
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

using System;
namespace ConsoleApplication7
{
class Program
{
static void Main(string[] args)
{
const char player1 = 'x', player2 = 'o', empty = ' ';
char*,+ game = new char*3, 3+;
char winner = ' ';
int pos1;
int pos2;
bool choice = true ;
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
if (choice == true)
{
Console.WriteLine(" X Playing ");
Console.WriteLine(" enter your positions ");
pos1 = int.Parse(Console.ReadLine());
pos2 = int.Parse(Console.ReadLine());
if (pos1 > 2 || pos2 > 2)
{
Console.WriteLine("\t \t wrong position");
j--;
}
else if (game*pos1, pos2+ == 'o' || game*pos1, pos2+ =='x')
{

ٕٔٓ
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

Console.WriteLine("\t \t wrong position");


j--;
}
else
{
game*pos1, pos2+ = 'x';
Console.WriteLine();
choice = false ;
}
}
else
{
Console.WriteLine(" O Playing ");
Console.WriteLine(" enter your positions ");
pos1 = int.Parse(Console.ReadLine());
pos2 = int.Parse(Console.ReadLine());
if (pos1 > 2 || pos2 > 2)
{
Console.WriteLine("\t \t wrong position");
j--;
}
else if (game*pos1, pos2+ == 'x' || game*pos1, pos2+ =='o')
{
Console.WriteLine("\t \t wrong position");
j--;
}
else
{
game*pos1, pos2+ = 'o';
Console.WriteLine( );

ٕٔٔ
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

choice = true ;
}
}
for (int a = 0; a < 3; a++)
{
for (int b = 0; b < 3; b++)
{
switch (game[a, b])
{
case player1:
Console.Write("X");
break;
case player2: Console.Write("O");
break;
case empty:
Console.Write(" ");
break;
}
if (b < 2)
Console.Write(" | ");
}
if (a < 2)
{
Console.WriteLine();
Console.WriteLine(" ------");
}
}
Console.WriteLine(); Console.WriteLine();
for(int k=0;k<3;k++)
{

ٕٕٔ
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

for(int g=0;g<1;g++)
{
if (game[k , g]=='x' && game[k , g+1+ == 'x'
&& game[k , g+2+ == 'x')
{
Console.WriteLine("\t \t X Wins ");
winner = player1;
break;
}
else if (game[g , k] == 'x' && game*g+1 , k]== 'x'
&& game*g+2 , k] == 'x')
{
Console.WriteLine("\t \t X Wins ");
winner = player1;
break;
}
else if(game*0,0+=='x' && game*1,1+=='x' &&
game*2,2+=='x')
{
Console.WriteLine("\t \t X Wins ");
winner = player1;
break;
}
else if(game*2,0+=='x' &&
game*1,1+=='x' && game*0,2+=='x')
{
Console.WriteLine("\t \t X Wins ");
winner = player1;
break;
}

ٕٖٔ
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

}
if (winner == player1 || winner == player2)
break;
}
for(int k=0;k<3;k++)
{
for(int g=0;g<1;g++)
{
if(game*k,g+=='o' && game*k,g+1+=='o'
&& game*k,g+2+=='o')
{
Console.WriteLine("\t \t O Wins ");
winner = player1;
break;
}
else if(game[g,k]=='o' &&
game*g+1,k+=='o' && game*g+2,k+=='o')
{
Console.WriteLine("\t \t O Wins ");
winner = player1;
break;
}
else if(game*0,0+=='o' && game*1,1+=='o'
&& game*2,2+=='o')
{
Console.WriteLine("\t \t O Wins ");
winner = player1;
break;
}
else if(game*2,0+=='o' && game*1,1+=='o'

ٕٔٗ
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

&& game*0,2+=='o')
{
Console.WriteLine("\t \t O Wins ");
winner = player1;
break;
}
}
if (winner == player1 || winner == player2)
break;
}
if (winner == player1 || winner == player2)
break;
}
if (winner == player1 || winner == player2)
break;
}
if (winner != player1 && winner != player2)
Console.WriteLine("\t \t Draw ");
Console.WriteLine(); Console.WriteLine();

for (int i = 0; i < 3; i++)


{
for (int j = 0; j < 3; j++)
{
switch (game[i, j])
{
case player1:
Console.Write("X");
break;
case player2:

ٕٔ٘
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫;)"‪Console.Write("o‬‬
‫;‪break‬‬
‫‪case empty:‬‬
‫;)" "(‪Console.Write‬‬
‫;‪break‬‬
‫}‬
‫)‪if (j < 2‬‬
‫;)" | "(‪Console.Write‬‬
‫}‬
‫)‪if (i < 2‬‬
‫{‬
‫;) (‪Console.WriteLine‬‬
‫;)"‪Console.WriteLine("------‬‬
‫}‬
‫}‬
‫;) (‪Console.WriteLine‬‬
‫}‬
‫}‬
‫}‬

‫ٌُمكن تنفٌذ اللعبة بشكل أبسط من هذا لكن لم نتطرق لهذه األجزاء إلى اآلن لذا فهذا كان مجرد‬
‫تطبٌك على المصفوفات فكل ما ٌهمنا هو إتمانها أكثر ومعرفة كٌفٌة عملها‪.‬‬

‫‪ٕٔٙ‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫النصوص‬
‫( ‪) Strings‬‬

‫النصوص هً عبارة عن متسلسلة أو مصفوفة من الحروؾ‪ ،‬فٌمكنن فعل ما تشاء فً‬


‫النص من حذؾ أو إضافة أو إلتصاص‪.‬‬
‫فٌمكنن تعرٌؾ النص بهذه الطرٌمة ‪:‬‬
‫;" ‪string var_name = " value‬‬
‫المٌمة أو النص ٌجب أن ٌُوضع بٌن عالمتٌن تنصٌص وبداخلها ٌمكنن أن تكتب أي‬
‫شًء حتى إذا كانت أرلام أو أو مسافة خالٌة أو نص مدمج مع رلم فإنه سٌتعامل معها‬
‫ض َعت بٌن عالمتٌن تنصٌص‪.‬‬ ‫على أنها نص ألنها ُو ِ‬
‫مثل ‪:‬‬
‫;"‪string name = "123 mahmoud‬‬
‫;) ‪Console.WriteLine( name‬‬
‫الناتج ‪:‬‬
‫‪123 mahmoud‬‬

‫وٌُمكنن أن تضٌؾ أي لٌمة من النوع ‪ string‬أو ‪ char‬على لٌمة المتؽٌر الذي ٌكون‬
‫من النوع ‪string‬‬
‫;‪string name1 = "mahmoud" , name2="soliman", name3‬‬
‫;‪name3 = name1 + name2‬‬
‫أو ٌمكننا أن نضٌؾ النص أو الحرؾ الجدٌد على المدٌم بطرٌمة مباشرة‪.‬‬

‫‪ٕٔ7‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫مثال ‪:‬‬
‫;"‪string name ="Mahmoud‬‬
‫;"‪name +=" Soliman‬‬
‫;) ‪Console.WriteLine( name‬‬
‫الناتج ‪:‬‬
‫‪Mahmoud Soliman‬‬
‫وٌُمكنن أن تؤخذ المٌم من المستخدم بالطرٌمة العادٌة‪.‬‬

‫أول حرؾ فً النص ٌؤخذ الترلٌم ( ‪ 0 ) index‬كما فً المصفوفة ألنه كما للت هو‬
‫عبارة عن مصفوفة من الحروؾ‪.‬‬
‫مثال ‪:‬‬
‫;"‪string x = "Hello‬‬

‫‪0‬‬ ‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪4‬‬


‫‪H‬‬ ‫‪e‬‬ ‫‪l‬‬ ‫‪l‬‬ ‫‪o‬‬

‫;) ‪Console.WriteLine(" the result ,0- ,1- ", x * 1 + , x * 4 +‬‬


‫الناتج ‪:‬‬

‫‪eo‬‬
‫‪ -‬لمعرفة عدد حروؾ نص معٌن نستخدم الخاصٌة ( ‪.) Length‬‬
‫;) ‪Console.WriteLine( x.Length‬‬

‫الناتج ‪:‬‬
‫‪5‬‬

‫‪ٕٔ2‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫مثال ‪:‬‬
‫أبحث عن الحرؾ ‪ m‬فً نص ٌُدخله المستخدم‪.‬‬
‫) (‪static void Main‬‬
‫{‬
‫;) (‪string search = Console.ReadLine‬‬
‫;‪bool check = false‬‬
‫)‪for (int i = 0; i < search.Length; i++‬‬
‫{‬
‫) '‪if ( search[ i ] == 'm‬‬
‫;‪check = true‬‬
‫}‬
‫)‪if (check == true‬‬
‫;)" ‪Console.WriteLine("exist‬‬
‫‪else‬‬
‫;)"‪Console.WriteLine("not exist‬‬
‫}‬
‫فً هذا الكود عرفنا متؽٌر نوعه ‪ string‬ثم أخذنا لٌمته من المستخدم‪ ،‬وعرفنا متؽٌر‬
‫نوعه ‪ٌ bool‬ؤخذ المٌمة ‪ true‬أو ‪ flase‬ولد مررت له لٌمة إبتدائٌة ‪ false‬أي أن‬
‫الحرؾ الذي نبحث عنه ؼٌر موجود إال أن نجده‪ ،‬ثم أنشؤنا حلمة بإستخدام ‪ for‬وعداد‬
‫ٌبدأ من المٌمة صفر إلى ألل من المٌمة ‪ search.Length‬والتً تُمثل حجم النص أو‬
‫عدد حروفه‪ .‬من الممكن أن تسؤل نفسن لماذا ال نكتب عدد حروؾ النص بشكل‬
‫مباشر؟! ببساطة ألنه فً بعض البرامج ال نعرؾ عدد حروؾ النص ألنها تؤتً من‬
‫ال ُمستخدم فال ٌُمكن التولع بحجم النص‪ ،‬وٌُفض ّل دائما إستخدام هذه الخاصٌة فً حالة‬
‫المصفوفات‪.‬‬

‫وبداخل الحلمة ‪ for‬نستخدم شرط أنه إذا ُو ِج َد الحرؾ الذي نبحث عنه نجعل لٌمة‬
‫المتؽٌر ‪check = true‬‬

‫ولو لم ٌجده فتظل لٌمته بـ ‪ false‬كما كانت وهذه فائدة أن تمرر لٌمة إبتدائٌة بـ ‪.false‬‬

‫‪ٕٔ9‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫وبعد أن تنتهً الحلمة نستخدم شرط آخر لنتؤكد هل تؽٌرت لٌمة ‪ check‬أي هل الحرؾ‬
‫الذي نبحث عنه موجود أم ال‪.‬‬

‫مثال ‪:‬‬
‫استمبل نص من المستخدم ثم أعكس هذا النص‪.‬‬
‫‪Hello ------> olleH‬‬
‫) (‪static void Main‬‬
‫{‬
‫;) (‪string str = Console.ReadLine‬‬
‫; ;‪string str2 = string.Empty‬‬
‫;] ‪char[ ] x = new char[ str.Length‬‬
‫)‪for (int i = 0; i < str.Length; i++‬‬
‫{‬
‫;] ‪x[ i ] = str[ str.Length - 1 - i‬‬
‫;‪str2 += x* i +‬‬
‫}‬
‫;) ‪Console.WriteLine( str2‬‬
‫}‬
‫أخذنا المٌمة من المستخدم ثم أنشؤنا مصفوفة نوعها ‪ char‬أي من النوع حرؾ وٌكون‬
‫حجمها نفس حجم النص ولذلن أستخدمنا الخاصٌة ‪ str.Length‬لكً ترجع لنا حجم‬
‫النص‪ ،‬ثم أنشؤنا حلمة وجعلنا كل حرؾ من نهاٌة النص ٌُخزَ ن فً بداٌة المصفوفة‪.‬‬
‫وأنشؤنا متؽٌر آخر نوعه ‪ string‬لكً نُعٌد فٌه تخزٌن الحروؾ التً تؤتً من‬
‫المصفوفة‪.‬‬

‫مالحظة ‪:‬‬
‫‪ string.empty‬هذه لتفرٌػ المتؽٌر من أي لٌم موجودة بهذا المكان ُمسبما‪.‬‬

‫ٖٓٔ‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫النص‬

‫‪H‬‬ ‫‪e‬‬ ‫‪l‬‬ ‫‪l‬‬ ‫‪o‬‬

‫المصفوفة ‪x‬‬

‫‪o‬‬

‫أو ٌمكننا اإلستؽناء عن المصفوفة التً من النوع ‪ char‬لكنً تعمدّتُ كتابتها بهذه‬
‫الطرٌمة لتعرؾ طرٌمة التعامل مع النص والمصفوفة التً من النوع ‪ char‬وأنهما‬
‫متماثالن‪.‬‬
‫) (‪static void Main‬‬
‫{‬
‫;) (‪string str = Console.ReadLine‬‬
‫; ;‪string str2 = string.Empty‬‬
‫)‪for (int i = 0; i < str.Length; i++‬‬
‫;] ‪str2 += str* str.Length - 1 - i‬‬
‫;) ‪Console.WriteLine( str2‬‬
‫}‬
‫تمارٌن ‪:‬‬
‫أمامن مصفوفة مكونة من ‪ * 1, 4, 5, 8, 8, 9, 9, 0 +‬أطبع أكبر عدد مكون من رلمٌن‬
‫متجاورٌن‪.‬‬
‫فً هذا المثال ٌكون الناتج ‪99‬‬
‫) (‪static void Main‬‬
‫{‬
‫;‪int* + arr = , 1, 4, 5, 8, 8, 9, 9, 0 -‬‬
‫;‪int max = arr*0+‬‬

‫ٖٔٔ‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫;‪string res = string.Empty‬‬


‫;‪int num = 0‬‬
‫)‪for (int i = 0; i < arr.Length - 1; i++‬‬
‫{‬
‫;) (‪res = arr* i +.ToString( ) + arr* i + 1 +.ToString‬‬
‫;) ‪num = Convert.ToInt32( res‬‬
‫)‪if (num > max‬‬
‫;‪max = num‬‬
‫}‬
‫;)‪Console.WriteLine(max‬‬
‫}‬

‫عرفنا‬
‫عرفنا المتؽٌر ‪ max‬نوعه ‪ int‬لكً ٌحمل أكبر لٌمة موجودة‪ ،‬ثم ّ‬ ‫فً هذا الكود ّ‬
‫المتؽٌر ‪ res‬ونوعه ‪ string‬لكً ٌحمل كل عنصرٌن متجاورٌن ألننا سنضطر إلى دمج‬
‫كل عنصرٌن متجاورٌن وال ٌمكن الدمج إال فً النصوص لذا سنستمبل كل متؽٌر والذي‬
‫ٌلٌه ثم سنحولهم إلى نصوص من خالل الدالة ) (‪ ToString‬وبذلن ٌتحول الرلمٌن إلى‬
‫نص ثم ندمجهم ونخزنهم فً المتؽٌر ‪ ،res‬بعد ذلن نُح ِو ّل النص المكون من الرلمٌن‬
‫المدمجٌن إلى أعداد صحٌحة مرة أخرى لكً نستطٌع ممارنتهم بؤالعداد األخرى‪ ،‬ألنه‬
‫ال ٌمكن ممارنة نص بعدد صحٌح‪.‬‬
‫توجد الكثٌر من الخصائص والدوال الجاهزة الخاصة بالنصوص‪.‬‬

‫‪Length‬‬ ‫خاصٌة تحسب عدد حروؾ النص‬


‫) (‪string.Concat‬‬ ‫لدمج أكثر من نص مع بعضهم‬
‫) (‪Contain‬‬ ‫للبحث عن ممطع معٌن داخل النص وتُعٌد ‪ true‬أو‬
‫‪false‬‬
‫) (‪EndsWith‬‬ ‫للتؤكد من نهاٌة النص هل ٌنتهً بممطع أو حرؾ معٌن‬
‫انت تحدده أم ال فهً تعٌد ‪ true‬أو ‪false‬‬
‫) (‪StrartsWith‬‬ ‫للتؤكد من بداٌة النص هل ٌبدأ بممطع أو حرؾ معٌن‬
‫أنت تحدده أم ال وتعٌد ‪ true‬أو ‪false‬‬
‫) (‪ToUpper‬‬ ‫لتحوٌل النص إلى حالة الحروؾ الكبٌرة ( ‪) capital‬‬

‫ٕٖٔ‬
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

ToLower( ) ) small ( ‫لتحوٌل النص إلى حالة الحروؾ الصؽٌرة‬


Substring( ) ‫لمطع حرؾ أو أكثر من النص‬
Replace( ) ‫إلستبدال حرؾ أو ممطع فً النص بمٌمة جدٌدة‬

.‫وٌوجد الكثٌر من الدوال األخرى الخاصة بالنصوص‬


: ‫مثال‬
string x = "C# is a programming language" ;
string y = " and it's a high level language";
Console.WriteLine( x.Length ); ------> 28
Console.WriteLine( string.Concat( x , y ) );
C# is a programming language and it's a high level language
Console.WriteLine(x.EndsWith("uage")); ------> true
Console.WriteLine(x.StratsWith("is")); ------> false
Console.WriteLine(x.ToUpper());
C# IS A PROGRAMMING LANGUEAGE

Console.WriteLine(x.ToLower());
c# is a programming language

Console.WriteLine( x.Substring( 6 , 13 ) );
.‫فً هذه الدالة نحدد بداٌة ونهاٌة الممطع الذي نرٌده من النص‬
a programming
.‫أو ٌمكننا تحدٌد البداٌة فمط وتكون نمطة النهاٌة هً نهاٌة النص‬
Console.WriteLine( x.Substring( 6 ) );
a programming language

Console.WriteLine(x.Replace("pro","PRO"));
C# is a PROgramming language

ٖٖٔ
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫مثال ‪:‬‬
‫أكتب برنامج ٌح ِول النص إلى النظام الثنائً ( ‪.) Binary System‬‬
‫;‪using System‬‬
‫‪namespace Test‬‬
‫{‬
‫‪class Program‬‬
‫{‬
‫) (‪static void Main‬‬
‫{‬
‫;"‪string str = "Mahmoud soliman‬‬
‫; ‪string result‬‬
‫;‪int bin = 0‬‬
‫;) ‪Console.WriteLine( str‬‬ ‫فً هذه العملٌة المتؽٌر ‪bin‬‬
‫)‪for (int i = 0; i < str.Length; i++‬‬ ‫ٌؤخذ المٌمة العددٌة للحرؾ‬
‫{‬ ‫المحدد من النص‪.‬‬
‫;‪result = string.Empty‬‬
‫;] ‪bin = str[ i‬‬
‫;)" >‪Console.Write(str[ i ] + " = " + bin + " ---‬‬
‫) ‪while ( bin != 0‬‬
‫{‬
‫;‪result = ( bin % 2 ).ToString( ) + result‬‬
‫;‪bin /= 2‬‬
‫}‬
‫;)" " ‪Console.WriteLine(result +‬‬
‫}‬
‫}‬ ‫عملٌة تحوٌل الرلم إلى النظام‬
‫}‬ ‫الثنائً من خالل أخذ بالي‬
‫}‬ ‫المسمة له على ‪ 2‬ثم لسمته على‬
‫‪2‬‬

‫كل حرؾ ٌكون له لٌمة عددٌة صحٌحة مناظرة له كما ذكرت فً ممدمة الكتاب والنص هو‬
‫عبارة عن مجموعة من الحروؾ حتى المسافة الفارؼة تُعد حرفا فإننا نؤخذ المٌمة العددٌة لكل‬
‫حرؾ ونحولها إلى النظام الثنائً ونطبع لٌمة أول حرؾ بالنظام الثنائً ثم نفرغ المتؽٌر الذي‬
‫نجمع فٌه المٌم التً تكون بالنظام الثنائً لٌكون ُمهٌَّؤ إلستمبال لٌمة الحرؾ الذي ٌلٌه‪.‬‬

‫ٖٗٔ‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫البرمجة كائنية التوجه‬


‫( ‪) Object Oriented Programming‬‬
‫) ‪( OOP‬‬

‫البرمجة كائنٌة التوجه هً عبارة عن طرٌمة لكتابة الكود لكنها جعلت الكود أسهل‬
‫وأختصرت فٌه كثٌرا ووفرت من الولت والمجهود بشكل كبٌر جدا فهً تتعامل مع كل‬
‫شًء على أنه كائن وهذا الكائن له صفات ووظائؾ فمثال اإلنسان هو كائن له صفات‬
‫تمٌزه ووظائؾ ٌموم بها‪.‬‬

‫الطول ‪) :‬‬ ‫لون العٌن ‪:‬‬ ‫فمثال من صفاته ( لون البشرة ‪:‬‬

‫)‬ ‫ٌنام ‪:‬‬ ‫ٌمشً ‪:‬‬ ‫ومن أفعاله ( ٌؤكل ‪:‬‬

‫وهكذا‪....‬‬

‫إذا فكل كائن من نفس النوع ٌمتلن نفس اسم الصفات واألفعال لكن بتفاصٌل مختلفة‪ ،‬أي‬
‫تختلؾ بٌانات هذه الصفات واألفعال ألن لكل كائن صفاته وأفعاله الخاصة به‪.‬‬

‫فالبرمجة كائنٌة التوجه لامت على هذا األساس‪ ،‬فمثال إذا كنت ترٌد إنشاء حساب على‬
‫مولع الفٌس بون‪ ،‬عند إدخال بٌاناتن هل ٌكتب لن مصمم المولع كود برمجً خاص‬
‫بصفحتن عند إنشائن لحساب على المولع؟ بالطبع ال‪ ،‬عندما تنشًء حسابا لن فإنن‬
‫تؤخد نسخة من المولع األصلً لكن البٌانات مجردة أي بدون بٌانات وتمألها أنت‬
‫ببٌاناتن الخاصة‪،‬‬

‫ٖ٘ٔ‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫فً ذلن الولت أنت أخذت كائن ( نسخة ) من المولع وأدخلت فٌه بٌاناتن أنت‪ ،‬وشكل‬
‫المولع ووظائفه متشابهه تماما عند كل الناس والبٌانات المجردة أٌضا متشابهه عند كل‬
‫الناس فمثال هو ٌطلب منن تحدٌد الجنس والعمر وهكذا وأنت تدخل بٌاناتن‪ ،‬هذه هً‬
‫البٌانات المجردة أي أنها ال تزال ال تحتوي على لٌم‪ ،‬وأي شخص جدٌد ٌرٌد إنشاء‬
‫حساب فإنه سٌؤخذ نفس النسخة من المولع وٌمألها ببٌاناته الخاصة‪.‬‬

‫هذه مجرد أمثلة تشبيهية فمط‪.‬‬

‫وهذه هً الطرٌمة التً بنٌت علٌها لؽة السً شارب كما لولنا فً ممدمة الكتاب‪.‬‬

‫إذا أٌن ٌكتب الكود الذي ٌؤخذ منه الكائن نسخة من البٌانات التً بداخله؟‬

‫ٌكتب بداخل ‪ class‬والـ ‪ class‬هو البنٌة التحتٌة للبرمجة كائنٌة التوجه‪.‬‬

‫وتكمن لوة الـ ‪ class‬فً عملٌة تسمى عملٌة تؽلٌؾ البٌانات‪ ،‬أي ٌحدد من ٌستطٌع‬
‫الوصول إلى البٌانات والتعامل معها‪.‬‬

‫وسنتحدث عن كل شًء ٌخص البرمجة كائنٌة التوجه والـ ‪ .class‬لكن أوال سنتحدث‬
‫عن طرق الوصول للبٌانات أو التؽلٌؾ‪.‬‬

‫‪ٖٔٙ‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫التغليف‬
‫( ‪) Encapsulation‬‬

‫توجد ٘ أنواع لتؽلٌؾ البٌانات فً لؽة السً شارب‪ ،‬أو تسمى طرق الوصول للبٌانات‪.‬‬

‫لبل البداٌة فً شرح هذه األنواع سؤ ُ ّ‬


‫ذكركم أن المشروع أو البرنامج هو عبارة عن‬
‫مجموعة من ‪ namespaces‬والـ ‪ namespaces‬عبارة عن مجموعة من الـ‬
‫‪.classes‬‬

‫ٌمكننا إنشاء أكثر من ‪ namespace‬فً المشروع وٌمكننا إنشاء أكثر من ‪ class‬بداخل‬


‫نفس الـ ‪ ،namespace‬وٌكون بداخل كل ‪ class‬الخصائص والدوال (الصفات‬
‫والوظائؾ ) الخاصة به‪.‬‬

‫فً هذه الحالة نحتاج إلى حماٌة بعض البٌانات التً تكون بداخل الـ ‪ class‬مثال من‬
‫ٌستطٌع رإٌتها والتعامل معها بداخل المشروع‪ ،‬فمن الممكن أن تكون بعض البٌانات لـ‬
‫‪ class‬مرئٌة فً ‪ class‬آخر وبعض البٌانات ؼٌر مرئٌة وال ٌمكن التعامل معها إال‬
‫بداخل الـ ‪ class‬الذي ُكتِ ْ‬
‫بت بداخله فمط‪ ،‬المبرمج ٌحدد من ٌستطٌع رإٌة البٌانات بداخل‬
‫المشروع سواء ‪ class‬فً نفس الـ ‪ namespace‬أو ‪ class‬فً ‪ namespace‬أخرى‬
‫بداخل المشروع‪.‬‬

‫‪ٖٔ7‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫أول طرٌمة للتؽلٌؾ هً ‪:‬‬

‫‪public - 1‬‬

‫البٌانات التً تكون من هذا النوع فإنها ستكون مرئٌة فً كل المشروع وٌستطٌع أي‬
‫‪ class‬داخل ‪ namespace‬أو أي ‪ namespace‬أخرى رإٌتها والتعامل معها‪.‬‬

‫طرٌمة تعرٌؾ الدوال أو الخصائص تكون بهذا الشكل ‪:‬‬

‫طرٌمة الوصول ‪ +‬نوع البٌانات ‪ +‬األسم‬

‫مثال ‪:‬‬

‫;‪public int variable‬‬

‫;‪using System‬‬
‫‪namespace First_program‬‬
‫{‬
‫‪class Program‬‬
‫{‬
‫) (‪static void Main‬‬
‫{‬
‫;) (‪Program2 pro = new Program2‬‬
‫;‪pro.x = 10‬‬
‫}‬
‫}‬
‫‪class Program2‬‬
‫{‬
‫;‪public int x‬‬
‫}‬
‫}‬

‫‪ٖٔ2‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫كل ما علٌن معرفته فً هذا الكود أننا استطعنا إسناد لٌمة للمتؽٌر ‪ X‬فً الـ ‪class‬‬
‫اآلخر ‪ ،Program‬وأستطعنا رإٌته والتعامل معه‪ .‬وٌتم الوصول إلى محتوى الـ ‪class‬‬
‫من خالل كائن أو نسخة (‪) object‬من هذا الـ ‪ class‬ثم النمطة (‪)dot( ).‬‬

‫النوع الثانً وهو ‪:‬‬

‫‪private – 2‬‬

‫هذا النوع ٌجعل إستخدام البٌانات التً من نفس نوعه تمتصر على الـ ‪ class‬المكتوبة‬
‫ٌحرم إستخدام البٌانات التً من نوعه إلى أي ‪ class‬آخر حتى لو‬‫بداخله فمط‪ ،‬أي أنه ّ‬
‫‪ class‬فً نفس ال‪ namespace‬وٌمكننا التعامل مع البٌانات التً من هذا النوع بداخل‬
‫الـ ‪ class‬الذي ُكتبت به فمط‪ ،‬ولو حاولنا تنفٌذ الكود السابك على النوع ‪ private‬فإن‬
‫المترجم سٌخرج لن خطؤ أنه ال ٌمكن الوصول لهذا المتؽٌر بسبب الحماٌة التً ٌمتلكها‪.‬‬

‫‪ٖٔ9‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫النوع الثالث ‪:‬‬

‫‪protected – 3‬‬

‫وهذا النوع معناه أنه ال ٌمكننا رإٌة البٌانات وال التعامل معها فً أي ‪ class‬آخر إال إذا‬
‫ث الـ ‪ class‬الذي ُكتِ ْ‬
‫بت بداخله البٌانات التً من هذا النوع‪ .‬وسنفهم مفهوم الوراثة‬ ‫ُو ِر َ‬
‫الحما‪.‬‬

‫;‪using System‬‬
‫‪namespace First_program‬‬
‫{‬
‫‪class Program : Prog‬‬
‫{‬
‫) (‪static void Main‬‬
‫{‬
‫; ) (‪Program p = new Program‬‬
‫; ‪p.x = 10‬‬
‫}‬
‫}‬
‫‪class Prog‬‬
‫{‬
‫; ‪protected int x‬‬
‫}‬
‫}‬

‫النمطتان تعنً أن الـ ‪ " Program " class‬لد ورث الـ ‪ " prog " class‬وٌمكنه‬
‫التعامل مع البٌانات التً بداخله كؤنها ُكتِبت بداخله لكن لٌس كل البٌانات‪ ،‬فمط المسموح‬
‫به‪ ،‬مثل ‪ public‬و ‪ ،protected‬إلى اآلن‪ ،‬وعندما نصل إلى الوراثة سنفهم كل شًء‬
‫عنها‪.‬‬
‫ٓٗٔ‬
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

Program p=new Program( ); >-- ‫هذه الخطوة‬

)Program( class ‫تعنً أننا أخذنا نسخة ( كائن ) من هذا الـ‬

p >----- ) object ( ‫كائن‬

Program >----- class

ٔٗٔ
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫النوع الرابع ‪:‬‬

‫‪internal – 4‬‬

‫وهً تعنً أننا نستطٌع رإٌة البٌانات التً من هذا النوع فً كل الـ ‪assemply‬‬
‫للبرنامج‬

‫الـ ‪ٌ assemply‬مكن أن تحتوي على أكثر من ‪namespace‬‬

‫‪ >---assemply‬ملؾ الـ ‪ DLL‬أو الـ ‪exe‬‬

‫النوع الخامس ‪:‬‬

‫‪protected internal – 5‬‬

‫نستطٌع رإٌة البٌانات والتعامل معها فً كل الـ ‪ assemply‬لكن ٌجب أن ٌكون الـ‬
‫‪ class‬الذي ُكتِبَت بداخله موروث للـ ‪ class‬الذي سنستخدمها فٌه‪.‬‬

‫;‪protected internal int x‬‬

‫ٕٗٔ‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫( ‪) Static‬‬

‫المتؽٌرات والدوال التً بداخل الـ ‪ class‬وٌكون نوعها ‪ static‬تكون ثابتة أي أنه ال‬
‫ٌمكن التعامل معها إال من خالل اسم الـ ‪ class‬نفسه‪.‬‬

‫نستخدم ‪ static‬عندما نرٌد التعامل مع الدالة أو الحمل خارج الـ ‪ class‬بدون الحاجة‬
‫إلى أخذ نسخة منه ( ‪ ) object‬فمثال الدالة ) (‪ WriteLine‬هً دالة ‪ static‬داخل‬
‫‪ Console‬والـ ‪ Console‬هو الـ ‪ class‬الخاص بدوال اإلدخال واإلخراج‪ .‬فعند‬
‫إستدعاء هذه الدوال نستخدم اسم الـ ‪ class‬مباشرة بدون أن نؤخذ منه نسخة‪.‬‬

‫والدالة الرئٌسٌة ٌجب أن تكون من النوع ‪ ،static‬وأي دالة نرٌد إستدعائها مباشرة فً‬
‫دالة من النوع ‪ٌ static‬جب أن تكون ‪ .static‬بإختصار أي نوع ‪ static‬ال نستطٌع‬
‫التعامل معه مباشرة إال من خالل نوع ‪ static‬آخر‪ ،‬لكن ٌمكن التعامل مع المتؽٌرات‬
‫التً من نوع ‪ static‬من خالل الدوال‪ ،‬حتى لو لم تكن الدالة ‪ static‬لكن العكس خطؤ‪،‬‬
‫أي أننا ال نستطٌع إستخدام متؽٌر لٌس ‪ static‬مع دالة نوعها ‪.static‬‬

‫مثال ‪:‬‬
‫;‪using System‬‬
‫‪namespace First_program‬‬
‫{‬
‫‪class Program‬‬
‫{‬
‫;‪int x‬‬
‫) (‪static void Main‬‬
‫{‬
‫;‪x = 10‬‬

‫ٖٗٔ‬
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

static ‫خطؤ ألن الدالة من النوع‬


‫ أٌضا‬static ‫ ٌجب أن ٌكون المتؽٌر‬static ‫وطالما الدالة‬
}
}
}

using System;
namespace First_program
{
class Program
{
static int x;
static void Main( )
{
x = 10;
}
}
}

static ‫فً هذه الحالة ٌجوز إسناد لٌمة للمتؽٌر والتعامل معه بشكل طبٌعً ألن نوعه‬
.static ‫والدالة نوعها‬

using System;
namespace First_program
{
class Program
{
static int x;
void name( )
{
x = 4;
ٔٗٗ
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

// ‫ من خالل الدالة فً الحالة العادٌة‬static ‫ٌجوز إسناد لٌمة للمتؽٌر الذي من النوع‬
}
static void Main( )
{

}
}
}

: ٕ ‫مثال‬
using System;
namespace First_program
{
class A
{
public static int x ;
}
class B
{
public static void variables()

A.x = 5 ;
}
}
}

ٔٗ٘
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫الدوال‬
‫( ‪) Methods or Functions‬‬

‫تحدثنا فً ممدمة الكتاب عن الدوال أو الوظائؾ وما عملها‪ ،‬لبل وجود فكرة الدوال كنا‬
‫إذا أردنا إستخدام جزء معٌن من الكود الذي كتبناه مرة أخرى فكان ٌجب كتابته ثانٌة‬
‫كلما أحتجنا إلٌه‪ ،‬فكان ٌؤخد ولت ومجهود‪ ،‬فلما ال نكتب جزء معٌن من الكود مرة‬
‫واحدة ونستخدمه متى أحتجنا إلٌه؟!‬

‫إذا ما الكود الذي ٌُكتب بداخل الدالة؟!‬

‫نكتب الكود الذي نرٌد إستخدامه أكثر من مرة‪ ،‬أي كود نرٌد تنفٌذه‪ .‬والدوال تُستخدم‬
‫ت فكرة الدوال لبل وجود البرمجة‬ ‫إلعطاء لٌم لخواص الـ ‪ class‬والتعامل معها‪ُ .‬و ِج َد ْ‬
‫كائنٌة التوجه‪ ،‬والدوال عامل رئٌسً فً البرمجة فال ٌمكن اإلستؽناء عنها‪.‬‬

‫ب بداخلها‪ ،‬ما عدا نوع واحد من الدوال ( ‪ ) void‬ال‬‫أي دالة ٌكون لها لٌمة عائدة ِلما ُك ِت َ‬
‫ٌعٌد لٌمة‪ ،‬معنى لٌمة عائدة أن الدالة كلها ٌكون لها لٌمة واحدة ٌمكن إستخدامها‬
‫وإدخالها فً عملٌات أخرى‪ ،‬سنفهم معنى المٌم العائدة بمثال‪ .‬أوال سنعرؾ طرٌمة‬
‫تعرٌؾ الدالة‪.‬‬

‫ٌمكننا تسمٌة الدالة بؤي اسم نرٌده‪.‬‬

‫( ) ‪ +‬اسم الدالة ‪ +‬المٌمة العائدة من الدالة ‪ +‬طرٌمة الوصول‬

‫{‬

‫}‬

‫) ( ‪Access_Modifier + Return_Type + Name_of_function +‬‬

‫‪ٔٗٙ‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫{‬

‫نكتب الكود داخل الموسٌن هنا ‪// .‬‬

‫}‬

‫طرٌمة الوصول تعنً صالحٌات إستخدام الدالة‪ ،‬أٌن نستخدمها ومن ٌستطٌع‬

‫إستخدامها‪.‬‬

‫لد تكون ‪:‬‬

‫‪public , private , protected , internal , protected internal.‬‬

‫اسم الدالة ‪:‬‬

‫توجد طرق لكتابة أسماء أعضاء الـ ‪ class‬سواء كان متؽٌر أو دالة‪ ،‬هً مجرد طرق‬
‫متعارؾ علٌها‪ٌ ،‬مكننا التؽاضً عن هذه الطرق وكتابتها بالشكل الذي نرٌد‪ ،‬لكن ٌُفضل‬
‫كتابتها بهذه الطرق‪.‬‬

‫أول طرٌمة ‪:‬‬

‫‪Pascal case - 1‬‬

‫ٌكون أول حرؾ من االسم حرؾ كبٌر ( ‪ ) Capital‬وإذا كانت الكلمة مكونة من‬
‫ممطعٌن فٌكون أول حرؾ من الممطع األول كبٌر وأول حرؾ من الممطع الثانً كبٌر‬
‫مثل ‪:‬‬

‫‪UserName‬‬

‫أو ‪User_Name‬‬

‫‪ٔٗ7‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫ثانً طرٌمة ‪:‬‬

‫‪Camel case – 2‬‬

‫وفً هذه الحالة ٌكون أول حرؾ من الممطع األول صؽٌر و أول حرؾ من الممطع‬
‫الثانً كبٌر مثل ‪:‬‬

‫‪userName‬‬

‫‪passWord‬‬

‫وهكذا‪...‬‬

‫ثالث طرٌمة ‪:‬‬

‫‪UpperCase – 3‬‬

‫هذه الحالة تكون كل حروؾ االسم كبٌرة وتستخدم مع االسماء التً تمتلن حروؾ للٌلة‬
‫مثل حرفٌن أو ثالث ومع الثوابت‪.‬‬

‫مثال ‪:‬‬

‫; "‪const string NAME = "mahmoud‬‬

‫;‪int GPA‬‬

‫وهكذا ‪...‬‬

‫ٌجب أن ٌكون اسم الدالة متصل وال تفصله مسافة فمثال ال نستطٌع تسمٌة دالة أو متؽٌر‬
‫بهذا الشكل ‪user name‬‬

‫النه توجد مسافة تفصل االسم وهذا ال ٌجوز‪ ،‬وفً حالة األسماء التً تتكون من أكثر‬
‫من ممطع مثل ‪ ... First Name‬نستخدم ( _ ) فتكون ‪.First_Name‬‬

‫أنتهٌنا من تسمٌة الدالة‪.‬‬

‫‪ٔٗ2‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫نوع الدالة ٌكون ‪:‬‬

‫‪int , float , double , long , short , string , char , bool‬‬

‫هذه األنواع تعنً أن نوع الدالة ٌكون من نفس نوع المٌمة العائدة منها فمثال إذا كانت‬
‫الدالة ‪ int‬إذا ٌجب أن تعٌد لٌمة صحٌحة ولو كانت ‪ٌ string‬جب أن تعٌد نص أو‬
‫كلمة‪ٌ float ،‬جب أن تعٌد لٌمة كسرٌة‪ bool .‬تعٌد ‪ true‬أو ‪ false‬وهكذا‪...‬‬

‫سنفهم معنى المٌمة العائدة للدالة لكن مإلتا حاول أن تتعلم كٌفٌة بناء هٌكل الدالة وماذا‬
‫ٌُكت َب بداخلها وكٌؾ تُست َخ َدم‪.‬‬

‫بعد كتابة الدالة واإلنتهاء منها كٌؾ نستخدمها وكم مرة نستخدمها؟‬

‫عن طرٌك إستدعاءها بإسمها فمط ونستدعٌها بعدد المرات التً نرٌد‪ ،‬نستطٌع‬
‫إستدعاءها وإستخدامها مالٌٌن المرات بدون إعادة كتابة الكود المكتوب بداخلها‪.‬‬

‫اتفمنا أن الدالة ٌكون لها لٌمة واحدة عائدة ما عدا نوع واحد فما هو؟‬

‫هذا النوع هو ‪ void‬أي ال ترجع أي شًء وال ٌكون لها لٌمة نستطٌع إستخدامها فً‬
‫عملٌات أخرى‪ ،‬أي عندما ننتهً من تنفٌذ الدالة ال نرٌد منها أي شًء آخر‪.‬‬

‫مالحظة ‪:‬‬
‫سنستخدم الـ ‪ class‬الرئٌسً وسنكتب بداخله الدوال التً نرٌدها‪ .‬سنُ َ‬
‫طبِ ّك علٌه "مإلتا"‪.‬‬
‫وٌكون بداخله الدالة الرئٌسٌة التً ٌبدأ تنفٌذ الكود منها‪ٌ .‬مكننا كتابة الدالة الجدٌدة فوق‬
‫الدالة الرئٌسٌة ( ‪ ) Main‬أو تحتها‪ ،‬ال ٌوجد فرق‪.‬‬

‫" تُكت َب الدوال بداخل ‪" class‬‬


‫مثال ‪:‬‬
‫;‪using System‬‬
‫‪namespace AnyThing‬‬
‫{‬
‫‪class Program‬‬
‫{‬

‫‪ٔٗ9‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫سنكتب كل الدوال هنا‬


‫) (‪static void Main‬‬
‫{‬

‫}‬
‫}‬
‫}‬
‫هذا هو الشكل الذي سنعمل علٌه ‪.‬‬

‫مثال‪:‬‬

‫أكتب دالة تطبع ‪.Hello World‬‬

‫لبل البدء فً كتابة الكود ٌجب أن نحلل السإال أوال‪ ،‬بعدها نكتب الخوارزمٌات لهذه‬
‫المسؤلة " الخوارزمٌات أي نحدد خطوات الحل خطوة بخطوة ونحل المسؤلة بطرٌمة‬
‫جبرٌة "‪ ،‬إذا سرنا على هذا النمط فلن نواجه أي صعوبة فً كتابة أي كود‪.‬‬

‫لنحلل هذه المسؤلة ‪...‬‬

‫نرٌد إنشاء دالة تطبع ‪ Hello World‬هل نحتاج لٌمة لهذه الدالة فٌما بعد؟ هل سنجري‬
‫علٌها أي عملٌة؟ جمع أو طرح أو لسمة أو سنؤخذ لٌمتها ندخلها فً دالة أو متؽٌر آخر؟‬
‫إذا كان الجواب ال ‪ ...‬فلن نحتاج أن ٌكون لها لٌمة عائدة وستكون نوع الدالة ‪.void‬‬
‫ونسمٌها باالسم الذي نرٌد لكن ٌفضل أن ٌكون اسم معبر عن الوظٌفة التً تموم بها‬
‫الدالة‪ ،‬مثال إذا كانت دالة طباعة‪ ..‬نسمٌها مثال ‪ print‬أو ‪ show‬أو ‪ view‬أي اسم‬
‫نرٌده فلن ٌحدث هذا فارق فً أي شًء‪.‬‬

‫مالحظة ‪:‬‬

‫طرٌمة الوصول لن تصنع فارق هنا‪ ،‬ألننا لن نستخدم الدالة فً ‪ class‬خارجً إنما‬
‫سنستخدمها بداخل الـ ‪ class‬المكتوبة بداخله فلن ٌفرق ما إذا كانت ‪ public‬أو‬
‫‪ private‬أو ‪ protected‬الكل سٌان فً هذا الولت‪ .‬اتفمنا أن هذا لمجرد التطبٌك‬
‫مإلتا فمط وبعدما ننتهً من تعلم كتابة الدوال والتعامل معها سنتعلم كٌؾ نستخدمها فً‬
‫أكثر من ‪ class‬آخر‪.‬‬

‫ٓ٘ٔ‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫;‪using System‬‬
‫‪namespace ConsoleApplication1‬‬
‫{‬
‫‪class Program‬‬
‫{‬
‫)(‪public void print‬‬
‫{‬
‫; )"‪Console.WriteLine("Hello World‬‬
‫}‬
‫}‬
‫}‬

‫إذا أنتهٌنا من كتابة الكود الخاص بالدالة كٌؾ سننفذها وأٌن؟‬

‫عندما تفتح ‪ visual studio‬فؤنت تجد ‪ class‬مكتوب والدالة الرئٌسٌة التً ٌبدأ تنفٌذ‬
‫الكود منها مكتوبة بداخله‪.‬‬

‫فنستدعً الدالة التً أنشؤناها بواسطة كتابة اسمها فً الدالة الرئٌسٌة وبما أن الدالة‬
‫الرئٌسٌة نوعها ‪ static‬فٌجب أن تكون الدالة التً سنكتبها نوعها ‪ static‬أٌضا حتى‬
‫تستطٌع الدالة الرئٌسٌة رإٌتها‪ٌ ،‬مكننا إستدعائها بطرٌمة أخرى عن طرٌك إنشاء كائن‬
‫من هذا الـ ‪ class‬لكن عندما نصل إلى شرح الـ ‪ class‬وكٌفٌة التعامل معه وطرٌمة‬
‫إنشاءه سنتعلم كل شًء ٌخص الدوال وكل طرق التعامل معها بداخل الـ ‪.class‬‬

‫حالٌا أي دالة نوعها ‪ٌ static‬جب أن ٌكون ما سنستدعٌه بداخلها سواء دالة أخرى أو‬
‫متؽٌر من نفس نوعها‪ ..‬أي ‪.static‬‬

‫وسٌتم تعرٌفها بهذا الشكل ‪:‬‬

‫طرٌمة الوصول ‪ + static +‬المٌمة العائدة من الدالة ‪ +‬اسم الدالة ( ) { الكود }‬

‫) ( ‪Access_Modifier + static + Return_Type + Name_of_function +‬‬

‫} ‪{ The code‬‬

‫ٔ٘ٔ‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫مثال ‪:‬‬
‫;‪using System‬‬
‫‪namespace ConsoleApplication1‬‬
‫{‬
‫‪class Program‬‬
‫{‬
‫)(‪public static void print‬‬
‫{‬
‫;)"‪Console.WriteLine("Hello World‬‬
‫}‬
‫) (‪static void Main‬‬
‫{‬
‫; ) ( ‪print‬‬
‫}‬
‫}‬
‫}‬
‫عند كتابة اسم الدالة ونُش ِؽل البرنامج سٌذهب إلى المكان الذي كتبنا فٌه كود الدالة وٌتم‬
‫تنفٌذ ما بداخلها‪.‬‬

‫سٌطبع ‪Hello World‬‬

‫فً عملٌة إنشاء الدالة إذا كنا سنستخدم متؽٌرات فً هذه الدالة فٌمكن أن نمرر هذه‬
‫المتؽٌرات للدالة أثناء التعرٌؾ وتسمى فً هذا الولت (‪ )Parameters‬ال ٌوجد حد‬
‫معٌن لعدد مدخالت دالة " ‪ " parameters‬فمط ما سنستخدمه وما نحتاج إلٌه‪ ،‬وهذه‬
‫المدخالت عند إستدعاء الدالة سنضطر إلى تمرٌرلٌمها إلى الدالة حتى تحدث العملٌة‬
‫التً نرٌدها من الدالة‪ ،‬وإعطاء ُمد َخل للدالة هو أمر إختٌاري لكن هنان بعض الدوال‬
‫ضل تمرٌر ُمدخالت لها إلجراء عملٌات علٌها وتمٌٌز كل دالة عن األخرى‪.‬‬ ‫ٌُف َ‬
‫فمثال عند تسجٌل الدخول لحساب فٌس بون فإنن تدخل البرٌد االلكترونً وكلمة‬
‫المرور‪ ،‬فهذه البٌانات التً تدخلها تكون ُمدخل لدالة تفحص كلمة المرور والبرٌد‬
‫االلكترونً الخاصٌن بن ال ُمسجلٌن على لواعد البٌانات‪.‬‬
‫ٕ٘ٔ‬
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

.‫وٌتم تعرٌؾ ال ُمدخل بالطرٌمة العادٌة النه متؽٌر عادي‬

Access_Modifier + static + Return_Type + Name_of_function +

( parameter1,parameter2,…… )

: ‫مثال‬

.‫انشًء دالة لجمع رلمٌن ثم اطبع ناتج الجمع‬

using System;
namespace ConsoleApplication1
{
class Program
{
public static void Print_Sum( int num1 , int num2 )
{
int sum = num1 + num2 ;
Console.WriteLine( sum ) ;
}
static void Main( )
{
int number1 , number2 ;
number1 = int.Parse(Console.ReadLine() ) ;
number2 = int.Parse(Console.ReadLine() ) ;
print( number1 , number2 ) ;
}
}
}

ٖٔ٘
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫فً هذا الكود أنشؤنا الدالة وأنشؤنا لها ُمدخلٌن وتمت عملٌة الجمع بداخل الدالة‪ ،‬ثم‬
‫أستدعٌنا دالة جمع الرلمٌن فً الدالة الرئٌسٌة‪ ،‬لكن الدالة التً أنشؤناها تؤخذ ُمدخلٌن لذا‬
‫سنضطر إلى تعرٌؾ متؽٌرٌن وتمرٌرهما إلٌها ولد أخذنا لٌم المتؽٌرات من المستخدم‪،‬‬
‫عند تشؽٌل البرنامج وعندما ٌصل المترجم إلى السطر الذي استدعٌنا به الدالة ٌذهب‬
‫إلى هذه الدالة أٌا كان مولعها فً الكود وٌنفذ ما بداخلها‪.‬‬

‫الدالة التً من النوع ‪ void‬ال نستطٌع عمل أي عملٌات علٌها فال ٌمكن أن ندخلها فً‬
‫أي عملٌة أخرى وال نستطٌع إجراء عملٌة طباعة علٌها بإستخدام دالة‬
‫) (‪Console.WriteLine‬‬

‫وال نستطٌع فعل ذلن ‪:‬‬

‫;‪int temp = print( number1 , number2 ) +2‬‬

‫ال نستطٌع تمرٌرها إلى متؽٌر أو فعل أي شًء فٌها ألنها لٌس لها لٌمة عائدة‪.‬‬

‫ماذا إذا أردنا أن نستخدم لٌمة ناتج الجمع ونسندها إلى متؽٌر آخر؟‬

‫لنحلل المسؤلة ‪...‬‬

‫ناتج جمع رلمٌن من النوع ‪ int‬ماذا سٌكون نوع ناتج الجمع؟‬

‫عدد صحٌح أٌضا‪.‬‬

‫إذا سٌكون نوع المٌمة العائدة من هذه الدالة ‪ int‬فٌكون نوع الدالة ‪.int‬‬

‫وٌجب فً هذه الحالة أن نستخدم الكلمة المحجوزة فً اللؽة ‪ return‬فً نهاٌة الكود‬
‫نكتب المٌمة العائدة من هذه الدالة‪ ،‬وكل دالة ٌكون لها لٌمة واحدة فمط عائدة‪.‬‬

‫المٌمة ‪return +‬‬

‫مثال ‪:‬‬
‫;‪using System‬‬
‫‪namespace ConsoleApplication1‬‬
‫{‬

‫ٗ٘ٔ‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫‪class Program‬‬
‫{‬
‫) ‪public static int Print_Sum( int num1 , int num2‬‬
‫{‬
‫; ‪int sum = num1 + num2‬‬
‫; ‪return sum‬‬
‫}‬
‫) (‪static void Main‬‬
‫{‬
‫; ‪int number1,number2‬‬
‫; )) (‪number1 = int.Parse(Console.ReadLine‬‬

‫; )) (‪number2 = int.Parse(Console.ReadLine‬‬
‫; ‪int temp = print( number1 , number2 ) + 100‬‬

‫; ) ‪Console.WriteLine( temp‬‬

‫}‬
‫}‬

‫}‬

‫فً هذا الكود أنشؤنا الدالة وأصبح نوعها ‪ int‬أي المٌمة العائدة منها ‪ int‬الدالة كاملة فً‬
‫ذلن الولت هً عبارة عن لٌمة واحدة ٌمكن أن نفعل بها أي شًء‪ ،‬وأستدعٌناها فً‬
‫الدالة الرئٌسٌة ومررنا لها ال ُمدخالت التً عرفناها وأخذنا لٌمهم من المستخدم‪ ،‬بعد ذلن‬
‫مررنا الدالة كاملة إلى متؽٌر‪ ،‬إذا هذا المتؽٌر حالٌا ٌحمل لٌمة الدالة‪ .‬ثم أضفنا إلى لٌمة‬
‫الدالة ٓٓٔ‪ ،‬فمثال إذا أدخل المستخدم ٕٓ وٖٓ سٌكون ناتج الدالة ٓ٘ وسٌضٌؾ علٌها‬
‫ٓٓٔ ثم سٌضع المٌمة الجدٌدة فً المتؽٌر ‪.temp‬‬

‫ماذا لو كانت العملٌة التً ستتم فً الدالة هً لسمة ولٌست جمع إذا فٌوجد إحتمال أن‬
‫ٌكون ناتج المسمة عدد كسري‪ ،‬فٌجب أن نؽٌر نوع الدالة لنفس نوع المٌمة العائدة منها‪.‬‬
‫أي ٌكون نوعها ‪ float‬أو ‪.double‬‬

‫٘٘ٔ‬
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

: ‫مالحظة‬

‫ " أما إثناء إستدعاء الدالة وتمرٌر‬Parameters " ‫ُمدخالت الدالة أثناء اإلنشاء تسمى‬
." Arguments " ‫لٌم لها فتُسمى ال ُمدخالت‬

: ‫مثال‬

.‫أكتب دالة تؤخذ رلمٌن ثم تعٌد الرلم األكبر فٌهما‬

using System;
namespace ConsoleApplication1
{
class Program
{
public static int Max_Value( int num1 , int num2 )
{
if ( num1 > num2 )
return num1;
else if ( num2 > num1 )
return num2 ;
else
return 0 ;
}
static void Main( )
{
int number1 , number2;
number1 = int.Parse(Console.ReadLine( ));
number2 = int.Parse(Console.ReadLine( ));
Console.WriteLine(Max_Value( number1 , number2 ) ;

ٔ٘ٙ
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

}
}
}

: ‫تمارٌن‬

.‫أكتب دالة تؤخذ من المستخدم األس واألساس وتخرج الناتج‬

ٖٕ = ٘ ‫مثال االساس ٕ واألس‬

2ٔ = ٗ ‫األساس ٖ واألس‬

using System;
namespace ConsoleApplication1
{
class Program
{
public static void Power( int Base_num , int power_num )
{
int result = 1;
for ( int i = power_num ; i > 0 ; i-- )
{
result *= Base_num ;
}
Console.WriteLine( result );
}
static void Main( )
{
int Base = int.Parse(Console.ReadLine( ) );
int Power = int.Parse(Console.ReadLine( ) );

ٔ٘7
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫; ) ‪Power ( Base,Power‬‬ ‫) ‪// ( 2,6‬‬


‫}‬
‫}‬
‫}‬

‫الناتج ‪:‬‬

‫‪64‬‬

‫وتوجد دالة جاهزة بداخل اللؽة تسمى ‪ pow‬داخل ‪ٌ class‬سمى ‪Math‬‬

‫; ) ‪Math.Pow ( 2 , 6‬‬

‫سٌخرج لن نفس النتٌجة لكن ٌجب أن تعتمد على نفسن فً مرحلة التعلم وتتعلم كٌؾ‬
‫تنشئ دوال بنفسن ‪.‬‬

‫تمارٌن ‪:‬‬

‫أكتب دالة تؤخذ رلم من المستخدم وتعٌد الجذر التربٌعً لهذا الرلم إن ُوجد‪.‬‬

‫;‪using System‬‬

‫‪namespace ConsoleApplication1‬‬

‫{‬
‫‪class Program‬‬
‫{‬
‫) ‪public static void SQRT( int num‬‬
‫{‬

‫‪ٔ٘2‬‬
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

for ( int i = num ; i > 0 ; i-- )


{
if ( i * i == num )
{
Console.WriteLine ( i );
}
}
Console.WriteLine ( result );
}
static void Main( )
{
int number=int.Parse ( Console.ReadLine ( ) );
SQRT ( number ); // ( 25 )
}
}
}
: ‫الناتج‬

: ‫تمارٌن‬

‫أكتب دالة تؤخذ من المستخدم مصفوفة ورلم معٌن ثم ترجع عدد مرات تكرار هذا الرلم‬
.‫فً تلن المصفوفة‬
using System;
namespace ConsoleApplication1
{
class Program
{
public static int count_item( int [ ]arr, int num )
{

ٔ٘9
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

int count = 0;
for ( int i = 0 ; i < arr.Length ; i++ )
{
if ( num == arr [ i ] )
{
count++;
}
}
return count;
}
static void Main( )
{
int [ ] x = { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 1 , 4 , 7 , 9 , 4 , 5 }

int num = int.Parse ( Console.ReadLine( ) );


Console.WriteLine ( " item " + num + " repeated " + count
( x , num ) + " times " );
}

}
}

: ‫تمارٌن‬

‫ تؤخذ المٌمة األولى والعملٌة التً تتم سواء ضرب أو‬،‫أكتب دالة لتنفٌذ العملٌات الحسابٌة‬
‫جمع أو لسمة ثم تؤخذ المٌمة الثانٌة وتعٌد ناتج العملٌة التً ستتم وتحدد من لِبل‬
.‫ال ُمستخدم‬

using System;
namespace ConsoleApplication1
{
class Program

ٔٙٓ
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

{
static float Math_Operation(float operand1, char operation,
float operand2)
{

float result = 0.0f;


switch ( operation )
{
case '+':
result = operand1 + operand2;
break;
case '-':
result = operand1 - operand2;
break;
case '/':
result = operand1 / operand2;
break;
case '*':
result = operand1 * operand2;
break;
case '%':
result = operand1 % operand2;
break;
}
return result;
}
static void Main( )
{
while ( true )
{
Console.WriteLine("Enter operand1 : operation : operand2 :");

ٔٙٔ
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

float op1 = float.Parse(Console.ReadLine( ));


char op = char.Parse(Console.ReadLine( ));
float op2 = float.Parse(Console.ReadLine( ));
Console.WriteLine(Math_Operation(op1 , op , op2));
}
}
}
}
. ‫الدوال التً تعٌد لٌم ٌمكن تمرٌر المٌمة العائدة منها إلى دالة أخرى‬
: ‫مثال‬
using System;
namespace ConsoleApplication6
{
class Program
{
static int a(int x , int y)
{
if (x > y)
return x;
else
return y;
}
static int b(int x, int y)
{
return x + y;
}
static int c(int x, int y)
{
return x - y;
}
static int d(int x, int y)
{
return x * y;
ٕٔٙ
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫}‬
‫)‪static void sum(int a,int b,int c‬‬
‫{‬
‫;)‪Console.WriteLine(a + b + c‬‬
‫}‬
‫) (‪static void Main‬‬
‫{‬
‫;)‪sum(a(7, b(3, c(5, d(2,4) ) ) ), 5, 2‬‬
‫}‬
‫}‬
‫}‬
‫الناتج ‪ٔٗ :‬‬

‫فً هذا الكود أنشؤنا ٘ دوال‪ ،‬كل دالة لها وظٌفة مختلفة عن األخرى‪ ،‬فالدالة "‪ "a‬تؤخذ‬
‫لٌمتٌن ثم تعٌد المٌمة األكبر فٌهما والدالة "‪ "b‬تؤخذ لٌمتٌن ثم تعٌد ناتج جمعهما‪ ،‬والدالة‬
‫"‪ "c‬تؤخذ لٌمتٌن وتعٌد ناتج طرحهما والدالة "‪ "d‬تؤخذ لٌمتٌن وتعٌد ناتج ضربهما‪،‬‬
‫والدالة "‪ "sum‬تؤخذ ثالث لٌم وتطبع ناتج جمعهم‪.‬‬
‫وفً دالة الـ ‪ Main‬أستدعٌنا الدالة ‪ sum‬وهً تؤخذ ثالث لٌم كما ذكرت‪ ،‬ثم مررنا لها‬
‫الدالة ‪ a‬وبعد ذلن مررنا للدالة ‪ a‬المٌمة ‪ 7‬والمٌمة األخرى كانت عبارة عن الدالة ‪b‬‬
‫ومررنا للدالة ‪ b‬المٌمة ٖ والمٌمة األخرى كانت عبارة عن الدالة ‪ c‬ومررنا لها المٌمة ٘‬
‫والمٌمة األخرى كانت عبارة عن الدالة ‪ d‬ومررنا للدالة ‪ d‬المٌمتٌن ٕ وٗ‪.‬‬
‫عند تنفٌذ هذا الكود فإن الدوال الداخلٌة هً التً تُنفَذ أوال وبما أن هذه الدوال ذات لٌمة‬
‫عائدة فإن كل دالة تُعٌد لٌمة واحدة فمط‪ .‬وتكون هذه المٌمة هً ال ُمدخل اآلخر للدالة التً‬
‫تسبمها ‪.‬‬
‫فً هذا المثال الدالة ‪ d‬تؤخذ المٌمتٌن ٕوٗ ووتعٌد ناتج ضربهما أي ‪ 2‬إذا تكون المٌمتان‬
‫اللتان ممرناهما للدالة ‪ c‬هما ٘ و ‪ ، 2‬ثم تعٌد الدالة ‪ c‬ناتج طرحهما فتعٌد المٌمة ‪، ٖ-‬‬
‫وبذلن تكون المٌم الممررة إلى الدالة ‪ b‬هً ٖ و ‪ ، ٖ-‬ثم تعٌد الدالة ‪ b‬ناتج جمعهما‬
‫فتعٌد المٌمة صفر‪ ،‬وبذلن تكون المٌم الممررة للدالة ‪ a‬هً صفر و ‪ 7‬وتعٌد الدالة ‪a‬‬
‫المٌمة األكبر فٌهما فتعٌد المٌمة ‪، 7‬‬
‫وبذلن تكون المٌم التً ُم ِررت للدالة ‪ sum‬هً ‪( 7 , 5 ,2) :‬‬
‫وتطبع ناتج جمعهم فٌكون ٗٔ‬

‫ٖ‪ٔٙ‬‬
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

ref
‫عندما نمرر لٌم للدالة فإننا نؤخذ نُسخة من هذه المٌم وٌحدث التؽٌٌر فٌها أما المٌم‬
.‫األساسٌة فً ذاكرة الكمبٌوتر لم ٌحدث بها أي تؽٌٌر ولم تتؤثر‬

‫فمثال إذا أردنا تنفٌذ عملٌة تبدٌل بٌن لٌمتً متؽٌرٌن عن طرٌك دالة فإنه سٌبدل المٌم‬
.‫لكن سٌبدلها فً النُسخة فمط ولٌس فً المتؽٌرات األصلٌة‬

using System;
namespace ConsoleApplication1
{
class Program
{
public static void Swap( int num1 , int num2 )
{
int temp=num1;
num1=num2;
num2=temp;
}
static void Main( )
{
int number1 = 10 , number2 = 20;
Swap ( number1 , number2 ) ;
Console.WriteLine("number1 = " + number1);
Console.WriteLine("number2 = "+number2);
}
}
}

ٔٙٗ
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

: ‫الناتج‬

number1 = 10;

number2 = 20;

‫ لكن ماذا لو أردت إحداث‬.‫ؼٌرنا فً النُسخ فمط‬


ّ ‫لن ٌحدث أي تبدٌل فعلً فً المٌم ألننا‬
‫تؽٌٌر فعلً فً المتؽٌرات األصلٌة فً الذاكرة ؟‬

( ref ( ‫نستخدم الكلمة المحجوزة‬

using System;
namespace ConsoleApplication1
{
class Program
{
public static void Swap( ref int num1 ,ref int num2 )
{
int temp = num1;
num1 = num2;
num2 = temp;
}
static void Main( )
{
int number1 = 10 , number2 = 20;
Swap ( ref number1 , ref number2 ) ;
Console.WriteLine("number1 = " + number1);
Console.WriteLine("number2 = "+number2);
}
}
}

ٔٙ٘
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

: ‫الناتج‬

number1 = 20;

number2 = 10;

using System;
namespace ConsoleApplication1
{
class Program
{
public static void Swap( ref int num1 ,ref int num2 )
{
num1 = 40 ;
num2 = 30 ;
}
static void Main( )
{
int number1=10,number2=20;
Swap ( ref number1 , ref number2 ) ;
Console.WriteLine("number1 = " + number1);
Console.WriteLine("number2 = "+number2);
}
}
}
: ‫الناتج‬

number1 = 40;

number2 = 30;

ٔٙٙ
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

‫المٌم الجدٌدة لن تإثر فً المتؽٌرات ألننا مررنا للمتؽٌرات لٌم مرجعٌة فً الدالة والمٌم‬
.‫ُوضعت فً المتؽٌرات األصلٌة ال النُسخ‬

: ‫تمارٌن‬
using System;
namespace ConsoleApplication1
{
class Program
{
public static int Swap( ref int num1 )
{
num1 = num1*num1 ;
return num1;
}
static void Main( )
{
int number1 = 10;
Swap ( ref number1 ) ;
Console.WriteLine("number1 = " + number1);
}
}
}
: ‫الناتج‬
number1 = 100

ٔٙ7
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫‪out‬‬
‫إذا أنشؤنا دالة تؤخذ ُمدخلٌن ووأردنا إستدعاء هذه الدالة فً دالة أخرى أو أي مكان فً‬
‫الكود‪ ،‬ومررنا متؽٌرات للدالة فً االستدعاء لكننا لم نعطً لٌم لهذه المتؽٌرات ونرٌد‬
‫أن نؤتً بالمٌم من الدالة نفسها‪ ،‬فً الحالة العادٌة هذا ال ٌجوز وٌجب أن نعطً لٌم‬
‫للمتؽٌرات التً سنمررها ك ُمدخالت للدالة حتً إذا أدخلنا لهذه المتؽٌرات لٌم بتدائٌة فً‬
‫الدالة‪.‬‬

‫إلستخدام المٌم التً أستخدمناها فً الدالة ٌجب أن نحدد له أنه سٌؤتً بمٌم ل ُمدخالت‬
‫الدالة من الدالة نفسها‪.‬‬

‫‪ٔٙ2‬‬
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

: ‫مثال‬

using System;
namespace ConsoleApplication1
{
class Program
{
public static void fun_name( out int num1 ,out int num2 )
{
num1 = 200 ;
num2 = 100 ;
}
static void Main( )
{
int number1 , number2;
fun_name( out number1 , out number2 ) ;
Console.WriteLine("number1 = " + number1);
Console.WriteLine("number2 = "+number2);
}
}
}
: ‫الناتج‬

number1 = 200

number2 = 100

‫ فإنه سٌتجاهلها وٌستخدم المٌم الخارجٌة‬number1 , number2 ‫حتى لو أدخلنا لٌم لـ‬
.‫التً تؤتً من الدالة‬

ٔٙ9
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

using System;
namespace ConsoleApplication1
{
class Program
{
public static void fun_name( out int num1 ,out int num2 )
{
num1 = 200 ;
num2 = 100 ;
}
static void Main( )
{
int number1 = 60 , number2 = 30 ;
fun_name ( out number1 , out number2 ) ;
Console.WriteLine("number1 = " + number1);
Console.WriteLine("number2 = "+number2);
}
}
}
: ‫الناتج‬

number1 = 200

number2 = 100

.‫ تتطلب أن تدخل لٌم للمتؽٌرات التً ستمررها للدالة لحظة اإلستدعاء‬ref

ٔ7ٓ
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫الخط الذي تحت المتؽٌرٌن لحظة إسنادهما للدالة ٌُعنً أنه ٌجب أن نعطً لهما لٌم ولت‬
‫تعرٌفهما‪.‬‬

‫مثال ‪:‬‬

‫أكتب دالة لتنفٌذ عملٌة المضروب لرلم ٌدخله المستخدم‪.‬‬

‫مثال لمضروب الـ ٗ ‪:‬‬

‫ٗ * ٖ * ٕ * ٔ = ٕٗ‬

‫ٔ‪ٔ7‬‬
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

using System;
namespace ConsoleApplication1
{
class Program
{
public static void factorial ( int num )
{
int fact=1;
if( num<=0 )
Console.WriteLine( 0 );
else
{
for(int i=1 ; i<=num ; i++)
{
fact *= i ;
}
Console.WriteLine(fact);
}
}
static void Main( )
{
int number = int.Parse( Console.ReadLine( ));
factorial(number) ;
}
}
}

ٔ7ٕ
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫‪params‬‬
‫تستخدم كلمة ‪ params‬عندما ال نعلم عدد ُمدخالت ( ‪ ) parameters‬الدالة وعدد‬
‫ال ُمدخالت فً هذه الدالة ٌُعبر عن حجم المصفوفة‪.‬‬

‫مثال ‪:‬‬
‫;‪using System‬‬
‫‪namespace ConsoleApplication1‬‬
‫{‬
‫‪class Program‬‬
‫{‬
‫) ‪public static int Max_Value_in_array ( params int [ ] arr‬‬
‫{‬
‫; ‪int max=arr*0+‬‬
‫)‪for( int i =0 ; i < arr.Length ; i++‬‬
‫) ‪if ( arr [ i ] > max‬‬
‫;] ‪max = arr[ i‬‬
‫; ‪return max‬‬
‫}‬
‫) (‪static void Main‬‬
‫{‬
‫‪Console.WriteLine ( Max_Value_in_array ( 3 , 4 , 5 , 6 , 7‬‬
‫;) ) ‪, 8 , 1 , 2 , 3 , 4 , 5‬‬
‫}‬
‫}‬
‫}‬
‫الناتج ‪:‬‬

‫‪2‬عدد ُمدخالت الدالة ٌكون ؼٌر محدود أي ٌمكننا تمرٌر العدد الذي نرٌده لكن مع كل‬
‫ُمدخل نضٌفه ٌزٌد حجم المصفوفة بممدار ٔ‪ ،‬فمثال حجم المصفوفة فً هذا الكود‬
‫سٌكون ٔٔ‪ ،‬وسٌطبع المٌمة األكبر فً هذه المصفوفة‪.‬‬

‫ٖ‪ٔ7‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫الدالة ذاتية اإلستدعاء‬


‫( ‪) Recursion function‬‬

‫ٌوجد نوع من الدوال ٌسمى الدالة العائدة‪ ،‬أي التً تُستدعى بداخل نفسها‬
‫إذا أ ُستدعت دالة بداخل نفسها فإنها تظل تستدعً نفسها إلى أن تولفها بشرط‪ ،‬لذا فٌجب‬
‫تحدٌد شرط لها لكً تتولؾ‪.‬‬
‫سننفذ نفس برنامج المضروب بها‪ ،‬بدون إستخدام ‪loop‬‬

‫;‪using System‬‬
‫‪namespace ConsoleApplication1‬‬
‫{‬
‫‪class Program‬‬
‫{‬
‫) ‪public static int factorial ( int num‬‬
‫{‬
‫) ‪if( num<=0‬‬
‫; ‪return 0‬‬
‫لتولؾ الدالة عند هذا الرلم ‪else if ( num==1 ) //‬‬
‫; ‪return 1‬‬
‫‪else‬‬
‫;))‪return ( num * factorial(num-1‬‬
‫}‬
‫) (‪static void Main‬‬
‫{‬
‫ٗ‪ٔ7‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫;) ) ( ‪int number = int.Parse( Console.ReadLine‬‬


‫; ) ) ‪Console.WriteLine ( factorial ( number‬‬
‫}‬
‫}‬
‫}‬
‫الناتج ‪:‬‬

‫ٕٓٔ‬

‫ٌجب أن ٌكون نوع الدالة أي نوع ؼٌر ‪ void‬فال ٌُمكن أن ٌكون ‪ ،void‬ألن طرٌمة‬
‫عمل هذا النوع من الدوال هو أنها تستدعً نفسها مرة أخرى بداخل نفسها فإذا كان‬
‫نوعها ‪ void‬فإننا لن نستطٌع عمل أي عملٌة علٌها فنحن هنا نحتاج إلى أن نضرب‬
‫الرلم فً لٌمة الدالة ونطرح ٔ من الرلم إلى أن ٌصل الرلم ال ُمدخل إلى ٔ‪.‬‬

‫فإذا أدخل المستخدم صفر أو لٌمة ألل من الصفر بالسالب فإنها سترجع صفر‪،‬‬

‫وإذا أدخل ٔ فإن الدالة سترجع ٔ‬

‫وإذا أدخل رلم ٘ فإنها ستضرب الرلم ؾ لٌمة الدالة نالص ٔ وتستدعً نفسها مرة‬
‫أخرى فٌكون الرلم ٗ ثم ٖ ثم ٕ وتتولؾ وتعٌد ناتج ضرب هذه المٌم مع بعضها فتكون‬
‫لٌمة الدالة كلها تساوي ٘ * ٗ * ٖ * ٕ أي ٕٓٔ‪.‬‬

‫مثال ‪:‬‬

‫أحسب مجموع األرلام من رلم ٌدخله المستخدم إلى رلم أكبر ٌحدده المستخدم أٌضا‬
‫بدون إستخدام ‪.loop‬‬

‫مثال من ٓٗ إلى ٕٓٔ‬


‫;‪using System‬‬

‫‪namespace ConsoleApplication1‬‬

‫٘‪ٔ7‬‬
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

{
class Program
{
public static int sum ( int start , int end)
{
if( start>end ) // ‫لتولؾ الدالة عند هذا الرلم‬
return 0 ;
else
return ( start + sum(start+1 , end));
}
static void Main( )
{
int start = int.Parse( Console.ReadLine( ));
int end = int.Parse( Console.ReadLine( ));
Console.WriteLine ( sum ( start , end ) ) ;
}
}
}

: ‫مثال‬

‫أنشًء دالة تؤخذ مصفوفة ك ُمدخل وتخرج أكبر لٌمة بهذه المصفوفة بدون إستخدام‬
.‫حلمات تكرار‬
using System;
namespace ConsoleApplication19
{
class Program
{
static int max = int.MinValue;
static void fun(int[ ] arr, int low)

ٔ7ٙ
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫{‬
‫)‪if (low < arr.Length‬‬
‫{‬
‫)‪if (arr[low] > max‬‬
‫;]‪max = arr[low‬‬
‫;)‪fun(arr, ++low‬‬
‫}‬
‫‪else‬‬
‫;)‪Console.WriteLine(max‬‬
‫}‬
‫)‪static void Main(string[ ] args‬‬
‫{‬
‫;}‪int[ ] x = {-123,-565,-3555,-293,234,987,265‬‬
‫;)‪fun(x, 0‬‬
‫}‬
‫}‬
‫}‬
‫الناتج ‪:‬‬

‫‪987‬‬

‫فً هذا المثال عرفنا متؽٌر ٌسمى ‪ max‬ووضعنا به لٌمة إبتدائٌة وهذه المٌمة تؤتً من‬
‫خالل ( ‪ ) int.MinValue‬وتكون هذه المٌمة هً أصؽر لٌمة ٌمكن أن ٌحملها متؽٌر‬
‫من النوع ‪ٌُ ،int‬مكنن وضع لٌمة إبتدائٌة صفر لكن بإفتراض أن األعداد المتواجدة فً‬
‫المصفوفة كلها سالبة ففً هذه الحالة لن ٌكون هنان رلم سالب أكبر من الصفر وٌكون‬
‫الناتج صفر وهذه النتٌجة خاطئة‪ ،‬ثم أنشؤنا دالة ‪ void‬وكان من الممكن أن تكون ‪ int‬ثم‬
‫تُعٌد لٌمة الـ ‪ max‬من خالل كلمة ‪ ،return‬وهذه الدالة تؤخذ مصفوفة نوعها ‪int‬‬
‫وتؤخذ أٌضا أصؽر ‪ index‬فً المصفوفة التً سنعمل علٌها ودائما ما ٌكون الصفر‪،‬‬
‫ونكتب الشرط الذي نرٌد أن تتولؾ الدالة عنده‪ ،‬متى تتولؾ الدالة ؟! عندما نصل إلى‬
‫آخر ‪ index‬فً المصفوفة أي أن المتؽٌر الذي ٌسمى ‪ low‬عندما ٌصل إلى آخر‬
‫‪ index‬فإنها تتولؾ بعد هذه العملٌة‪ .‬فمثال إذا كان حجم المصفوفة ‪ 7‬فتكون آخر لٌمة‬
‫‪ٔ77‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫ٌصل إلٌها المتؽٌر ‪ low‬هً ‪ ، 6‬ثم بعد ذلن نتحمك من المٌم الموجودة بالمصفوفة ما إذا‬
‫كانت أكبرمن لٌمة الـ ‪ max‬أم ال‪ ،‬وأي لٌمة أكبر من المٌمة الحالٌة للـ ‪ max‬إذا ستكون‬
‫لٌمة الـ ‪ max‬هً هذه المٌمة الجدٌدة ثم نستدعً الدالة داخل نفسها لكن نجعل المتؽٌر‬
‫‪ٌ low‬زٌد بممدار ‪ 1‬حتى ٌنتمل إلى الـ ‪ index‬الذي ٌلٌه وهكذا إلى أن ٌكون الشرط‬
‫الخارجً خطؤ وبذلن تتولؾ الدالة عن إستدعاء نفسها وٌتم تنفٌذ ما بداخل ‪ else‬وتطبع‬
‫آخر لٌمة وصل إلٌها المتؽٌر ‪.max‬‬

‫مثال ‪:‬‬

‫أنشًء دالة تؤخذ مصفوفة ك ُمدخل وتخرج أكبر لٌمة بهذه المصفوفة‪.‬‬
‫;‪using System‬‬
‫‪namespace ConsoleApplication1‬‬
‫{‬
‫‪class Program‬‬
‫{‬
‫) ‪public static int Max_Value_in_array ( int [ ] arr‬‬
‫{‬
‫; ‪int max=arr*0+‬‬
‫)‪for(int i = 0 ; i < arr.Length ; i++‬‬
‫;)) (‪arr[i]=int.Parse(Console.ReadLine‬‬
‫)‪for( int i =0 ; i < arr.Length ; i++‬‬
‫) ‪if ( arr [ i ] > max‬‬
‫;] ‪max = arr[ i‬‬
‫; ‪return max‬‬
‫}‬
‫) (‪static void Main‬‬
‫{‬
‫; ‪int * +x=new int*10+‬‬
‫; ) ) ‪Console.WriteLine ( Max_Value_in_array ( x‬‬
‫}‬

‫‪ٔ72‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫}‬
‫}‬
‫ٌمكن للدالة أن تؤخذ مصفوفة وٌتم التعامل معها بطرٌمة عادٌة جدا‪ٌ .‬تم إدخال المصفوفة‬
‫كـ ( ‪ُ ) Parameter‬مدخل للدالة‪ ،‬فً هذه الحالة نحن ال نعلم حجم المصفوفة لذا توجد‬
‫خاصٌة إلٌجاد حجم المصفوفة ‪ .Length‬فنستخدمها وحٌنما ننشًء المصفوفة فً دالة‬
‫الـ ‪ Main‬ونمررها للدالة ٌجب أن نحدد الحجم وحٌنها هذه الخاصٌة ستحسب حجم‬
‫المصفوفة فً الدالة بعدها ت ُ ِمرر اسم المصفوفة التً أنشؤتها فً دالة ال‪ Main‬ك ُمدخل‬
‫مرر اسم المصفوفة فمط‪.‬‬ ‫للدالة‪ ،‬نُ ِ‬
‫تمارٌن ‪:‬‬

‫أنشًء دالة تؤخذ مصفوفتٌن وتنسخ أحدهما فً األخرى‪.‬‬


‫;‪using System‬‬
‫‪namespace ConsoleApplication1‬‬
‫{‬
‫‪class Program‬‬
‫{‬
‫)‪public static void Copy_array ( int [ ] arr ,int * + arr2‬‬
‫{‬
‫)‪for(int i = 0 ; i < arr.Length ; i++‬‬
‫; ‪arr2 * i + = arr * i +‬‬
‫}‬
‫) (‪static void Main‬‬
‫{‬
‫; ‪int [ ]x = new int*10+, 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 -‬‬
‫;‪int * +y=new int* 10 +‬‬
‫; ) ‪Copy_array ( x , y‬‬
‫}‬
‫}‬
‫}‬

‫‪ٔ79‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫( ‪) Object , Var , Dynamic‬‬

‫ٌوجد ثالثة أنواع من البٌانات ٌمكنهم إستمبال أي بٌانات من أي نوع‪ ،‬سواء كانت‬
‫البٌانات رلم صحٌح أو كسر أو نص أو حرؾ أو أي نوع آخر‪ ،‬لكن ٌوجد فرق بٌن‬
‫الثالثة أنواع‪.‬‬

‫أول نوع هو ‪:‬‬

‫‪object‬‬
‫كل أنواع البٌانات هً عبارة عن ( ‪ ) object‬فٌمكنه أن ٌؤخذ بٌانات من أي نوع‪.‬‬

‫وهو الـ ‪ class‬الرئٌسً لكل أنواع البٌانات وٌكون فً لاعدة هرم أنواع البٌانات‪.‬‬

‫لكن ( ‪ ) object‬ال ٌفهم معنى البٌانات التً بداخله‪ ،‬فال ٌمكنه إجراء أي عملٌة على ما‬
‫بداخله مع متؽٌر آخر‪.‬‬

‫مثال ‪:‬‬

‫; " ‪object x = " aaa‬‬

‫خطؤ ‪string y = x ‬‬

‫ال ٌمكن ألي نوع بٌانات آخر من األنواع المعروفة أن ٌحمل لٌمة متؽٌر من النوع‬
‫‪ object‬ألن نوعه ٌعتبر ؼٌر معلوم‪ ،‬هو فمط ٌحمل بٌانات بداخله لكن ال ٌعلم نوعها‪.‬‬
‫فال ٌمكنه التعامل إال مع ‪ object‬مثله‪ .‬لكن ماذا لو أردنا تخزٌن المٌمة التً تؤتً من‬
‫متؽٌر نوعه ‪ٌ object‬جب فً ذلن الولت أن نحولها لنفس النوع الذي ستخزن فٌه‪،‬‬
‫فمثال لو أردنا تنفٌذ نفس العملٌة السابمة سنضطر إلى تحوٌل الـ ‪ x‬إلى نفس نوع الـ ‪.y‬‬

‫ٓ‪ٔ2‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫; " ‪object x = " aaa‬‬

‫; ‪string y = ( string ) x‬‬

‫لكن ٌمكننا فعل العكس بدون تحوٌل‪.‬‬

‫; " ‪string y = " aaa‬‬

‫; ‪object x = y‬‬

‫ألننا أتفمنا أن الـ ‪ٌ object‬مكنه أن ٌحمل أي نوع آخر‪.‬‬

‫وٌمبل أن نؽٌر نوع البٌانات التً بداخله بدون أن ٌحدث خطؤ‪.‬‬

‫فمثال ‪:‬‬

‫;" ‪object x = " aa‬‬

‫;‪x = 4‬‬

‫; ) ‪Console.WriteLine( x‬‬

‫الناتج ‪:‬‬

‫‪4‬‬

‫ٌمكن أن ٌكون المٌمة العائدة من دالة من النوع ‪ object‬إذا كنا ال نعرؾ النوع الراجع‬
‫تحدٌدا‪.‬‬

‫وٌمكن للم ُدخل أٌضا أن ٌكون من النوع ‪ .object‬فً حالة أننا ال نعرؾ المٌمة التً‬
‫سٌدخلها للدالة هل هً نص أم حرؾ أم رلم‪.‬‬
‫;‪using System‬‬
‫‪namespace ConsoleApplication1‬‬
‫{‬
‫‪class Program‬‬

‫ٔ‪ٔ2‬‬
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

{
public static object fun ( params object [ ] arr )
{
return arr*3+ ;
}
static void Main( )
{
Console.WriteLine ( fun ( 3 , 4 , "aa" , 's' , true , 8 , 1 , 3.44
, 3 , 4 , 5 ) );
}
}
}
: ‫الناتج‬

‫ والدالة تعٌد لٌمة‬،‫ لذا ٌمكنها أن تحتوي على أي نوع بداخلها‬object ‫المصفوفة نوعها‬
‫ فالمٌمة العائدة منها إذا‬object ‫من نفس نوع المصفوفة وبما أن المصفوفة نوعها‬
. object ‫ستكون من النوع‬

.‫أكتب دالة لطباعة هذه المصفوفة التً أدخلنا فٌها البٌانات سابما‬
using System;
namespace ConsoleApplication1
{
class Program
{
public static void fun ( params object [ ] arr )
{
foreach( object i in arr )
Console.WriteLine ( i ) ;
}
static void Main( )
ٔ2ٕ
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫{‬
‫; ) ‪fun ( 3 , 4 , "aa" , 's' , true , 8 , 1 , 3.44 , 3 , 4 , 5‬‬
‫}‬
‫}‬
‫}‬

‫‪is‬‬
‫هً كلمة محجوزة للتؤكد من نوع البٌانات ‪.‬‬

‫مثال ‪:‬‬
‫; ‪object x =10‬‬
‫; " ‪objext y = " aa‬‬
‫) ‪if ( x is int‬‬
‫{‬
‫;)" ‪Console.WriteLine(" Yes‬‬
‫}‬
‫فً هذا المثال سٌنفذ جملة الطباعة التً بداخل ‪ if‬ألن الشرط صحٌح‪.‬‬

‫أما إذا لولنا ‪:‬‬


‫) ‪if ( x is string‬‬
‫{‬
‫;)" ‪Console.WriteLine(" Yes‬‬
‫}‬
‫فلن ٌنفذ ألن المتؽٌر ‪ x‬عدد صحٌح ولٌس نصا‪ ،‬إذا فالكلمة المحجوزة ‪ is‬تتؤكد من نوع‬
‫البٌانات هل هو متطابك أم ال‪.‬‬

‫ٖ‪ٔ2‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫‪var‬‬
‫هً مثل ‪ object‬لكن ٌوجد بعض اإلختالفات بٌنهم‪.‬‬

‫فمثال عند تعرٌؾ متؽٌر نوعه ‪ var‬ال ٌمكن تؽٌٌر المٌمة التً بداخله لنوع آخر‪.‬‬

‫مثال ‪:‬‬

‫; ‪var x = 3‬‬

‫خطؤ ; " ‪x = " aaa‬‬

‫هو ٌمبل نوع واحد فمط فعندما مررنا له المٌمة ٖ فهو ٌتعامل مع المتؽٌرعلى أنه ‪int‬‬
‫وٌجب أن نمرر له لٌمة أثناء تعرٌؾ المتؽٌر‪.‬‬
‫فال ٌجوز أن نعرؾ المتؽٌر من النوع ‪ var‬بدون تمرٌر لٌمة له فً مرحلة التعرٌؾ‪.‬‬
‫‪ ‬خطؤ ; ‪var x‬‬

‫ٌمكنه أن ٌؤخذ أي لٌمة‪ .‬لكنه ٌتمٌز عن أن ‪ object‬فً أنه عندما نُ ّ‬


‫عرؾ متؽٌر من‬
‫نوعه فإنه ٌعرؾ نوع المٌمة التً بداخله وٌمكننا أن ندخلها فً متؽٌر آخر من نفس‬
‫نوعها‪.‬‬

‫مثال ‪:‬‬

‫; " ‪var x = " aaa‬‬

‫; ‪string y = x‬‬

‫وٌمكننا إجراء أي عملٌة علٌه طالما أننا نستخدمه مع متؽٌرات من نفس نوعه‪.‬‬
‫لكن إذا أدخلناه فً متؽٌر من نوع آخر فٌجب أن نحول نوعه أوال لنفس النوع الجدٌد‪.‬‬
‫مثال ‪:‬‬

‫; ‪var x = 3.4f‬‬

‫;‪int y = ( int ) x‬‬

‫ٗ‪ٔ2‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫مالحظة ‪ :‬المٌم الكسرٌة ٌكون نوعها تلمائٌا ‪ ،double‬إذا أردناها أن تكون ‪ float‬فإننا‬
‫نكتب حرؾ ‪ f‬بجانب المٌمة‪.‬‬

‫ال ٌستخدم لتعرٌؾ الدوال أو حتى المصفوفات‪ ،‬فهو ٌستخدم لتعرٌؾ المتؽٌرات فمط‬
‫بداخل الدوال‪.‬‬

‫‪dynamic‬‬
‫هو عبارة عن نوع بٌانات ٌستطٌع أن ٌخزن أي شئ بداخله وتستطٌع أن تؽٌر لٌمته‬
‫ألي نوع ترٌده وأن تدخله فً أي عملٌة ترٌدها‪ .‬هذا النوع ال ٌتعرؾ على ما بداخله إال‬
‫ولت التشؽٌل‪.‬‬
‫; " ‪dynamic c =" ttt‬‬
‫; " ‪string s = c + " aaa‬‬
‫;‪c=6‬‬
‫; ‪int n = c-3‬‬
‫;) ‪Console.WriteLine( s +" "+ n‬‬

‫الناتج ‪:‬‬

‫‪tttaaa‬‬ ‫‪3‬‬

‫حتى إذا ُوجد خطؤ فإنه ال ٌتعرؾ علٌه إال عند التشؽٌل ألنه ٌترجم ما بداخله فً ولت‬
‫التشؽٌل فمط‪.‬‬

‫مثال ‪:‬‬

‫; ' ‪dynamic x = ' a‬‬

‫; ‪string y = x‬‬

‫لن ٌظهر الخطؤ فً الكود لكنه سٌظهره عند تشؽٌل البرنامج‪.‬‬

‫ٌمكننا أن نستخدمه فً تعرٌؾ دالة أو مصفوفة بدون مشكلة‪.‬‬


‫٘‪ٔ2‬‬
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

: ‫تمارٌن‬

‫أكتب دالة لتسجٌل عملٌة دخول إلى نظام أو مولع له برٌد إلكترونً وكلمة سر‬

‫بإفتراض أن البرٌد اإللكترونً ال ُمسجل على لاعدة البٌانات هو‬


Mahmoud@gmail.com

mahmoud12345 ً‫وكلمة السر ه‬

using System;
namespace ConsoleApplication1
{
class Program
{
public static void Login ( string _Email , string _Password )
{
if ( _Email == " Mahmoud@gmail.com " && _Password
==" mahmoud12345 ")
Console.WriteLine(" welcome ");
else
Console.WriteLine( " invalid data ");
}
static void Main( )
{
string E_Mail = Console.ReadLine ( );
string password= Console.ReadLine ( );
Login ( E_Mail , password );
}
}
}

ٔ2ٙ
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫( ‪) Classes‬‬

‫ذكرت مسبما نبذة عن البرمجة كائنٌة التوجه وعن ماهٌة الـ ‪ class‬سنتعلم كٌؾ نُنشًء‬
‫الـ ‪.class‬‬

‫عندما نُنشًء ‪ class‬فإننا نُنشًء نوع من البٌانات التى نستطٌع أخذ عدد ؼٌر محدود‬
‫من النسخ من هذا النوع الواحد‪ ،‬ولد شرحت مثال لمولع الفٌس بون‪ ،‬فمثال صفحتن‬
‫الشخصٌة تكون عبارة عن ‪ class‬به كل بٌاناتن الشخصٌة‪ ،‬وعند تسجٌل الدخول ٌكون‬
‫‪ class‬به دوال لتنفٌذ عملٌة الدخول‪ ،‬كل شخص ٌكون له بٌاناته الخاصة أي أن كل‬
‫شخص لد أخذ نسخة من هذا الـ ‪ class‬ومألها ببٌاناته الخاصة‪.‬‬

‫إذا كنت ترٌد إنشاء برنامج أو مولع وٌوجد علٌه مستخدمون وكل مستخدم له بٌانات‬
‫بؤنواع مختلفة مثل العمر واالسم وتارٌخ المٌالد ‪ ،...‬كٌؾ ستربط كل هذه البٌانات‬
‫بمستخدم واحد؟!‬

‫هذه التمنٌة جعلت البرمجة عامة سهلة ومرنة‪.‬‬

‫توجد لاعدة فً البرمجة الكائنٌة تمول أن كل شًء هو عبارة عن كائن‪.‬‬

‫طرٌمة التعرٌؾ ‪:‬‬

‫ضل أن‬
‫نكتب كلمة ‪ class‬ثم اسم الـ ‪ٌُ ،class‬مكن أن نسمٌه بؤي اسم نرٌده‪ ،‬لكن ٌُف َ‬
‫ٌكون اسم ٌُع ِب ّر عما ٌموم به هذا الـ ‪class‬‬

‫‪class Name‬‬

‫{‬

‫}‬
‫‪ٔ27‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫وٌُكتب بداخل ‪ ،namespace‬طرٌمة الوصول ألي ‪ class‬تكون ‪ internal‬تلمائٌا‬


‫وٌُمكنن تؽٌٌره إلى ‪ ،public‬والبٌانات التً تكون بداخل ال ‪ class‬تكون ‪private‬‬
‫تلمائٌا ما لم نؽٌرها إلى نوع آخر‪.‬‬

‫إذا ماذا نكتب بداخل ال ‪class‬؟‬

‫نكتب بداخله كل الدوال التً نحتاجها لتنفٌذ عملٌة معٌنة‪ ،‬والمتؽٌرات التً سنستخدمها‪،‬‬
‫المتؽٌرات التً بداخل الـ ‪ class‬ؼالبا ما تكون ‪ private‬ونستخدمها من خالل الدوال‪،‬‬
‫وٌكون نوع الدالة ‪ .public‬الطرٌمة ال ُمتعارؾ علٌها أن ٌُكتب أول حرؾ من اسم‬
‫الـ ‪ class‬بحرؾ كبٌر‪ ،‬مثل ‪class Login‬‬

‫مثال ‪:‬‬

‫;‪using System‬‬
‫‪namespace ConsoleApplication1‬‬
‫{‬
‫‪class First‬‬
‫{‬
‫}‬
‫‪class Program‬‬
‫{‬
‫) (‪static void Main‬‬
‫{‬
‫}‬
‫}‬
‫}‬

‫‪ٔ22‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫ٌمكننا إنشاإه عن طرٌك كتابته مباشرة كما فعلت‪ ،‬لكن ٌُفضل أن ٌكون كل ‪ class‬فً‬
‫صفحة مستملة لكً ٌكون شكل الكود منظم وسهل فً المراءة والتعدٌل‪.‬‬

‫نذهب إلى اسم المشروع على الفٌجوال ستودٌو ثم نضؽط ضؽطة ٌمٌن بالمإشر فتظهر‬
‫لائمة بها كلمة ‪ Add‬ونضؽط على ‪ class‬ونسمٌه ونضؽط ‪ ،enter‬هكذا نكون لد‬
‫أنشؤنا ‪.class‬‬

‫(ٔ)‬

‫‪ٔ29‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫(ٕ)‬

‫لكً نؤخذ نسخة من هذا ال ‪ class‬بكل البٌانات التً بداخله " المسموح الوصول إلٌها‬
‫فمط " نكتب اسم الـ ‪ class‬ثم اسم المتؽٌر‪ ،‬لكن فً هذه الحالة ٌسمى كائن ( ‪) object‬‬
‫ولٌس متؽٌر‪.‬‬

‫;‪using System‬‬

‫‪namespace ConsoleApplication1‬‬

‫{‬

‫‪class First‬‬

‫{‬

‫; ‪public int age‬‬

‫; ‪string name‬‬

‫ٓ‪ٔ9‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫}‬

‫‪class Program‬‬ ‫كائن ( ‪) Object‬‬

‫{‬ ‫نسخة من الـ ‪class‬‬

‫) (‪static void Main‬‬

‫{‬

‫;) ( ‪First obj = new First‬‬

‫}‬

‫}‬
‫‪Class‬‬
‫}‬

‫تستخدم الكلمة المحجوزة ‪ new‬لخلك كائن جدٌد‪ ،‬واسم الـ ‪ٌ class‬تبعه لوسٌن ٌسمى‬
‫‪ُ " ( constructor‬مشٌد " ) سنعرؾ ماهو ال ُمشٌد الحما‪ ،‬كل ما علٌن معرفته مإلتا أن‬
‫هذه طرٌمة تعرٌؾ الـ ‪ class‬وأخذ نسخة منه أو إنشاء كائن جدٌد منه‪.‬‬

‫عندما نُنشًء كائن (‪ )object‬من ‪ class‬فإنه فً ذلن الولت ٌحتوي على كل خواص‬
‫هذا الـ ‪ class‬المسموح له رإٌتها‪.‬‬

‫‪ -‬نستطٌع الوصول إلى كل خصائص الـ ‪ class‬من خالل "اسم الكائن (‪)object‬‬
‫متبوعا بنمطة " ( ‪) .‬‬

‫بعدها ٌمكننا أن نمرر له المٌمة‪.‬‬

‫ٔ‪ٔ9‬‬
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

: ‫مثال‬

: ‫ لموظؾ ٌحمل البٌانات اآلتٌة‬class ‫أكتب‬

.)" ‫ رلم الموباٌل‬، ‫ المرتب‬، ‫ العمر‬، ‫(" االسم‬


using System;
namespace ConsoleApplication1
{
class Employee
{
public string Name;
public int Age;
public int Salary;
public string Mobile_number;
}
class Program
{
static void Main( )
{
Employee emp = new Employee( );
emp.Name = " ali " ;
emp.Age = 30 ;
emp.Salary = 3000 ;
emp.Mobile_number = " +201111111111 " ;
}
}
}

‫ بعد ذلن عرفَنا الخصائص التً بداخله وإذا أردنا رإٌتها خارج هذا‬class ‫أوال أنشؤنا‬
،‫ كما عرفنا مسبما‬public ‫ ٌجب أن ٌكون نوعها‬class ‫الـ‬

ٔ9ٕ
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫ثم أخذنا نسخة "كائن" (‪ )object‬من هذا الـ ‪ class‬ومررنا لٌم لهذه البٌانات المجردة‪.‬‬
‫كما اتفمنا البٌانات التً تكون بداخل الـ ‪ class‬تكون مجردة أي أنها ال تحتوي على‬
‫لٌمة‪.‬‬

‫‪this‬‬
‫الكلمة المحجوزة ‪ this‬تستخدم بداخل الـ ‪ class‬وتستطٌع رإٌة كل ما بداخل الـ ‪class‬‬
‫وتعمل كؤنها كائن من هذا الـ ‪ class‬فنستخدمها بداخل الدوال التً بداخل الـ ‪ class‬لكن‬
‫ؼٌر مسموح إستخدامها بداخل دوال من النوع ‪ static‬وال تستطٌع رإٌة المتؽٌرات أو‬
‫الحمول التً تكون من النوع ‪.static‬‬

‫سنُعٌد نفس المثال السابك لكن بإستخدام الدوال‪.‬‬


‫;‪using System‬‬
‫‪namespace ConsoleApplication1‬‬
‫{‬
‫‪class Employee‬‬
‫{‬
‫; ‪string Name‬‬
‫; ‪int Age‬‬
‫; ‪int Salary‬‬
‫; ‪string Mobile_number‬‬
‫‪public void add_employee ( string name , int age , int salary ,‬‬
‫) ‪string mobile‬‬
‫{‬
‫; ‪this.Name = name‬‬
‫; ‪this.Age = age‬‬
‫; ‪this.Salary = salary‬‬

‫ٖ‪ٔ9‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫; ‪this.Mobile_number = mobile‬‬
‫}‬
‫}‬
‫‪class Program‬‬
‫{‬
‫) (‪static void Main‬‬
‫{‬
‫;) (‪Employee emp = new Employee‬‬
‫‪emp.add_employee ( "ali", 30 , 5000 ,‬‬
‫;)"‪"+201111111111‬‬
‫إلضافة موظؾ آخر ‪//‬‬
‫‪emp.add_employee ( "john" , 34 , 6000‬‬
‫;)"‪,"+201222222222‬‬
‫وهكذا‪//‬‬
‫}‬
‫}‬
‫}‬
‫أنشؤنا دالة وٌجب أن ٌكون نوعها ‪ public‬لكً تُرى خارج الـ ‪ class‬ولكً نستطٌع‬
‫التعامل معها‪ ،‬وبها ال ُمدخالت التً سنمرر لٌم من خاللها لخصائص الـ ‪ class‬أي‬
‫للموظؾ كما فً المثال‪.‬‬
‫بعدها أنشؤنا كائن من هذا الـ ‪ class‬ثم أستدعٌنا الدالة التً تضٌؾ البٌانات ومررنا لها‬
‫تعرؾ متؽٌرات فً الدالة‬
‫ّ‬ ‫المٌم بشكل مباشر‪ٌ .‬مكنن أن تؤخذ البٌانات من ال ُمستخدم بؤن‬
‫الرئٌسٌة ثم تؤخذ لٌم لها من المستخدم ثم تمرر هذه المتؽٌرات للدالة‪.‬‬

‫;) (‪string name = Console.ReadLine‬‬


‫;)) (‪int age = int.Parse(Console.ReadLine‬‬
‫;)) (‪int salary = int.Parse(Console.ReadLine‬‬
‫;) (‪string mobile = Console.ReadLine‬‬
‫;) ‪emp.add_employee ( name , age , salary , mobile‬‬
‫وهكذا‪....‬‬

‫ٗ‪ٔ9‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫‪ ( Constructor‬ال ُمشيد )‬
‫هو عبارة عن دالة وٌكون بنفس اسم الـ ‪ class‬لكنه ال ٌرجع أي بٌانات‬
‫أي ال ٌكون له لٌمة عائدة " ‪ " Return value‬مثل ‪ int‬أو ‪ String‬وال حتى ‪.void‬‬
‫تعمل هذه الدالة تلمائٌا عندما نؤخذ نسخة من هذا الـ ‪ٌُ class‬كتب فً هذه الدالة لٌم‬
‫إبتدائٌة نرٌد أن نمررها لمتؽٌر ما ومن الممكن أن نمرر له مدخالت أثناء اإلنشاء‬
‫كالدالة تماما‪ ،‬وٌوجد أكثر من نوع للـ ‪.constructor‬‬

‫أول نوع هو ‪:‬‬


‫ٔ‪ -‬الـ ‪ " default‬التلمائي " ‪:‬‬
‫وهذا النوع ال ٌؤخذ أي ُمدخالت أثناء اإلنشاء وٌمكننا إعطاء لٌم إبتدائٌة للحمول التً‬
‫تكون فً الـ ‪ ،class‬وحتى لو لم نكتب الـ ‪ default constructor‬فً الـ ‪ class‬فإنه‬
‫ٌُنشؤ تلمائٌا‪ ،‬وٌعطً للحمول التً من النوع ‪ int‬لٌمة إبتدائٌة صفر وللحمول التً من‬
‫النوع ‪ string‬لٌم بتدائٌة ب ‪ ،null‬و ‪ null‬ت ُ ّ‬
‫عبر عن الال شًء‪.‬‬

‫طرٌمة تعرٌؾ ال ُمشٌد التلمائً ‪:‬‬

‫) (‪public + Class_Name‬‬
‫{‬

‫}‬
‫مثال ‪:‬‬
‫‪class Test‬‬
‫{‬
‫; ‪public int id‬‬
‫;‪public string name‬‬
‫) (‪public Test‬‬
‫{‬
‫;‪this.id = 1‬‬
‫;"‪this.name = "ali‬‬

‫٘‪ٔ9‬‬
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

}
}
class Program
{
static void Main( )
{
Test T = new Test( ); // Default constructor.
Console.WriteLine("My id is "+T.id + "and my name is " +
T.name );
// My id is 1 and my name is ali
}
}

) Parameterized constructors ( ‫ ُمشيد له ُمدخالت‬-ٕ

‫ فٌجب تمرٌر‬class ‫وهو ٌؤخذ ُمدخالت مثل الدالة تماما وعند أخذ نسخة من هذا الـ‬
.‫ُمدخالت له حتى ٌتم تنفٌذه‬

: ‫طرٌمة تعرٌؾ ال ُمشٌد الذي ٌؤخذ ُمدخالت‬

public + Class_Name( ‫) ال ُمدخالت‬


{

: ‫مثال‬
class Employee
{
string Name ;
int Age ;

ٔ9ٙ
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫; ‪int Salary‬‬
‫; ‪string Mobile_number‬‬
‫‪public Employee( ) // default constructor‬‬
‫} {‬
‫) ‪public Employee( string name , int age‬‬
‫{‬ ‫‪// Parameterized constructors‬‬
‫; ‪Name = name‬‬
‫; ‪Age = age‬‬
‫}‬
‫‪public void add_employee ( string name , int age ,‬‬
‫) ‪int salary,string mobile‬‬
‫{‬
‫; ‪this.Name = name‬‬
‫; ‪this.Age = age‬‬
‫; ‪this.Salary = salary‬‬
‫;‪this.Mobile_number = mobile‬‬
‫}‬
‫}‬
‫هذا ال ُمشٌد عندما تؤخذ نسخة من الـ ‪ class‬فإنه ٌعمل تلمائٌا وٌطلب منن أثناء تعرٌؾ‬
‫الكائن أن تضع لٌم إبتدائٌة للبٌانات التً أدخلتها فً ال ُمشٌد أثناء إنشاإه لكن إذا لم تدخل‬
‫له مدخالت فلن ٌطلب منن أي شًء‪ ،‬وبالطبع هذه المٌم اإلبتدائٌة هً مجرد لٌم مإلتة‬
‫ٌمكنن تؽٌٌرها‪ ،‬فمثال إذا أستدعٌت الدالة التً تُدخل البٌانات فالبٌانات الجدٌدة التً‬
‫أدخلتها هً التً ستُخزن‪ ،‬البٌانات التً بداخل ال ُمشٌد هً مإلتة وتُخزن فمط فً حالة‬
‫أنن لم تدخل أي بٌانات أخرى للمتؽٌر‪.‬‬

‫; ) ‪Employee Emp = new Employee ( " Mahmoud ", 30‬‬

‫هكذا ٌكون شكل ال ُمشٌد أثناء إستدعاإه أو أثناء تعرٌؾ كائن جدٌد‪.‬‬

‫‪ٔ97‬‬
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

) Copy Constructor ( -ٖ

‫ ) كائن آخر‬Object ( ‫ ) كائن إلى‬Object ( ‫وهذا النوع وظٌفته هً أنه ٌنسخ لٌم من‬
.‫ ك ُمدخل‬class ‫ كائن أو نسخة من الـ‬object ‫ وأثناء تعرٌفه ٌؤخذ‬،class ‫من نفس الـ‬

: ‫مثال‬
using System;
namespace Copy_Constructor
{
class Program
{
static void Main(string[ ] args)
{
employee e = new employee(10, "John", 3000);
employee em = new employee( e );
em.print( );
// Employee id : 10 , Employee name : John ,
// Employee salary : 3000
}
}
class employee
{
int id;
string name;
int salary;
public employee(int _id, string _name, int _salary)
{
this.id = _id;
this.name = _name;
this.salary = _salary;
}
ٔ92
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫)‪public employee(employee emp‬‬


‫{‬
‫;‪this.id = emp.id‬‬
‫;‪this.name = emp.name‬‬
‫;‪this.salary = emp.salary‬‬
‫}‬
‫)(‪public void print‬‬
‫{‬
‫‪Console.WriteLine(" employee id is : "+id+" \n Employee name :‬‬
‫;)‪"+name+" \n Employee salary : "+salary‬‬
‫}‬
‫}‬
‫}‬

‫‪ ( Destructor‬الهدام )‬
‫اله ّدام عكس ال ُمشٌد‪ ،‬هو أٌضا عبارة عن دالة تعمل تلمائٌا بعد إنتهاء البرنامج‪ ،‬ووظٌفته‬
‫أنه ٌهدم أي كائن لم ٌُست َخ َدم أو كائن أ ُستخ ِد َم لكن لم ٌعد له حاجة أو كائن لم ٌُست َخ َدم‪،‬‬
‫وهو لٌس كال ُمشٌد تحتاج أن تستدعٌه‪ .‬هو ٌعمل فور إنتهاء البرنامج دون إستدعاء وال‬
‫ٌحتاج إلى ( ‪ ،) Access modifier‬وكل ‪ٌ class‬كون له ‪ destructor‬واحد فمط‪.‬‬

‫طرٌمة التعرٌؾ ‪:‬‬

‫} { ) ( ‪~ Class_Name‬‬

‫هذه العالمة ( ~ ) تُسمى تٌلدا ‪.‬‬

‫مثال ‪:‬‬
‫‪class Employee‬‬

‫{‬

‫‪ٔ99‬‬
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

string Name;
int Age;
int Salary;
string Mobile_number;
public Employee( ) // default constructor
{ }
public Employee( string name , int age )
{
Name = name ;
Age = age ;
}
public void add_employee ( string name , int age , int salary ,
string mobile )
{
this.Name = name ;
this.Age = age ;
this.Salary = salary ;
this.Mobile_number = mobile ;
}
~Employee ( )
{
GC.Collect( ) ;
}
}

‫ الذي تحدثنا عنه فً بداٌة الكتاب‬Garbage Collector >--- ‫ ٌشٌر إلى‬GC.Collect


.‫فً الجزء الخاص بإطار العمل‬

ٕٓٓ
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫( ‪) Properties‬‬

‫‪get , set‬‬
‫الموصالت ( ‪) Accessors‬‬

‫الحمول التً تكون بداخل الـ ‪ class‬تكون محمٌة ومخفٌة على المستخدم وال ٌستطٌع‬
‫الوصول إلٌها‪ ،‬لكن ماذا لو كنا نرٌد تمرٌر لٌم لهذه الحمول من خارج الـ ‪ class‬بدون‬
‫أن نتعامل مع الحمول بشكل مباشر أو بدون دوال؟‬

‫فً هذا الولت سنستخدم ‪ set‬و ‪ get‬وهما عبارة عن كلمتٌن محجوزتٌن فً اللؽة حٌث‬
‫تُمكنن ‪ set‬من وضع لٌم لهذه الحمول أي للكتابة فمط‪ ،‬و ‪ get‬تُمكنن من لراءة البٌانات‬
‫التً تكون بداخل الحمل أي تكون للمراءة فمط‪.‬‬
‫ّ‬
‫الموصالت ‪:‬‬ ‫ٌوجد ثالثة طرق للوصول إلى هذه‬

‫‪Public‬‬

‫‪Private‬‬

‫‪Protected‬‬
‫ّ‬
‫الموصالت تعامل معاملة الدوال‪.‬‬

‫فنحن نتحكم َمن ٌستطٌع تمرٌر لٌم للحمول و َمن ال ٌستطٌع‪َ ،‬من ٌمكنه رإٌتها و َمن ال‬
‫ٌمكنه‪.‬‬

‫ٕٔٓ‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫دخل لٌمة لمرتب‬‫وتُستخدم ‪ set‬فً تحدٌد المٌمة التً ٌُدخلها المستخدم‪ ،‬فمثال إذا كنت ست ُ ِ‬
‫لكن هذه المٌمة ؼٌر منطمٌة مثل مرتب موظؾ ٔ جنٌة فً الشهر فؤنت ٌمكنن أن‬
‫تتحكم فً مدى المٌم الداخلة وٌجب أن ٌُدخل المستخدم لٌم فً المدى المطلوب لكً‬
‫تُخزن بداخل الحمل " المتؽٌر فً الـ ‪ " class‬فالمٌم تؤتً أوال عن طرٌك ‪ set‬وإذا كان‬
‫الشرط خطؤ فلن تُخزن فً الحمل‪ٌُ ،‬مكنن تحدٌد شرط لبل إستمبال المٌم بداخل ‪ set‬أو ال‬
‫تضع شروط‪ ،‬فالشرط لٌس إضطرارٌا لكن للتؤكد من المٌم فمط لبل تخزٌنها‪.‬‬

‫مثال ‪:‬‬
‫‪class Employee‬‬
‫{‬
‫; ‪private string Employee_Name‬‬
‫; ‪private int Employee_Age‬‬
‫; ‪private int Employee_Salary‬‬
‫‪public string Name‬‬
‫{‬
‫‪set‬‬
‫{‬
‫;‪Employee_Name = value‬‬
‫}‬
‫‪get‬‬
‫{‬
‫;‪return Employee_Name‬‬
‫}‬
‫}‬
‫‪public int Salary‬‬
‫{‬
‫‪set‬‬
‫{‬
‫) ‪if ( value <1000‬‬
‫{‬
‫; )" ‪Console.WriteLine (" invalid data‬‬
‫}‬
‫ٕٕٓ‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫‪else‬‬
‫{‬
‫; ‪Employee_Salary = value‬‬
‫}‬
‫}‬
‫‪get‬‬
‫{‬
‫; ‪return Employee_Salary‬‬
‫}‬
‫}‬
‫}‬
‫معنى الكود أن ‪:‬‬

‫أوال أنشؤنا ‪ class‬ثم عرفّنا فٌه الحمول ( " األسم ‪ ،‬العمر ‪ ،‬المرتب " ) وطرق‬
‫الوصول إلٌهم ‪ ،private‬ثم أنشؤنا خصائص لكً نتعامل مع هذه الحمول ونمرر لها لٌم‬
‫أو نمرأ منها هذه المٌم‪.‬‬

‫الخصائص ( " األسم ‪ ،‬المرتب " ) ٌتم إنشاء الخصائص تبعا للحمول التً نرٌد‬
‫للمستخدم التعامل معها بشكل ؼٌر مباشر فننشًء خاصٌة لكل حمل على حدة‪ ،‬وتسمى‬
‫الخاصٌة بؤي اسم نرٌده لكن ٌُفضل بؤن تكون باسم لرٌب من اسم الحمل لكً نمٌزها‪.‬‬
‫ّ‬
‫الموصالت ( ‪ ،) set , get‬وال ٌشترط كتابة ‪ set‬و ‪ get‬معا فً نفس‬ ‫ثم ننشًء‬
‫الخاصٌة‪ ،‬بل ٌمكننا جعل هذا الحمل للمراءة فمط وعندها نستخدم ‪ get‬فمط‪ ،‬أو للكتابة‬
‫فمط فنستخدم ‪ set‬أو كلٌهما‪.‬‬

‫نمرر المٌمة للحمل من خالل كلمة ‪ value‬وهً كلمة محجوزة فً اللؽة تؤخذ المٌمة التً‬
‫تؤتً من المستخدم وتمررها للحمل المشار إلٌه وٌجب أن تكون المٌمة من نفس نوع‬
‫الحمل او المتؽٌر‪.‬‬

‫فً خاصٌة الـ ‪ Salary‬أنشؤنا شرطا لكً نتؤكد من المٌمة التً تؤتً من المستخدم هل‬
‫هً فً المدى المطلوب وفً حالة كانت فً المدى المطلوب تُخزن بداخل الحمل أما إذا‬
‫كانت خارج المدى فال تُخزن‪.‬‬

‫وفً ‪ get‬نَسترجع المٌمة التً بداخل الحمل من خالل الكلمة المحجوزة ‪.return‬‬

‫ٖٕٓ‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫الوراثة‬
‫( ‪) Inheritance‬‬

‫الوراثة بالمعنى العامً هو أن ٌرث الشخص بعض الصفات أو األشٌاء الخاصة بؤبٌه أو‬
‫أحد ألاربه‪ ،‬كذلن األمر فً البرمجة‪ ،‬عندما ٌرث ‪ class‬ما ‪ class‬آخر فإنه ٌرث منه‬
‫كل الدوال والمتؽٌرات أو الصفات الخاصة بهذا الـ ‪ class‬وٌصبح الـ ‪ class‬الوارث‬
‫ٌسمى أبن والـ ‪ class‬الموروث ٌسمى أب‪.‬‬

‫والوراثة هً من أهم مباديء السً شارب وهً تسهل وتختصر علٌنا الكثٌر من الولت‬
‫والجهد‪ ،‬فعندما نرث ‪ class‬ما فإننا نستخدم كل شئ بداخل هذا الـ ‪ class‬بدون الحاجة‬
‫إلى كتابتها مرة أخرى فً الـ ‪ class‬الجدٌد‪.‬‬

‫مالحظة ‪:‬‬

‫نرث كل شئ مسموح لنا من لِبل الـ ‪ class‬األب ألن عملٌة التؽلٌؾ‬


‫(‪ )Encapsulation‬تلعب دورا هاما فً الوراثة فؤنت تحدد من ٌستطٌع رإٌة البٌانات‬
‫فً ‪ class‬آخر ومن ال ٌستطٌع‪ ،‬فمثال ٌوجد ‪ class‬اسمه ‪ employee‬و ‪ class‬آخر‬
‫اسمه ‪manager‬‬

‫‪ٌ employee‬وجد به حمل لألسم والعمر والعنوان والمرتب وبعض الدوال‪ ،‬وفً‬
‫‪ manager‬نحتاج أٌضا هذه الحمول باإلضافة إلى بعض الحمول األخرى‪ ،‬فهل سنكرر‬
‫نفس الحمول؟‬

‫الوراثة جعلتنا نستؽنى عن هذا التكرار وٌمكننا وراثة الـ ‪ class‬الذي نحتاج الصفات‬
‫التً بداخله ونستخدمها كٌفما نشاء‪.‬‬

‫ٕٗٓ‬
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

‫ األبن‬class ‫ الوراثة المتعددة تعنً أن ٌرث الـ‬،‫ ال تدعم الوراثة المتعددة‬C# ‫لؽة الـ‬
.‫ آخر‬class ‫أكثر من‬

interface ‫لكن ٌوجد شئ آخر ٌعوض هذا المصور ٌسمى‬

.‫وسنتطرق لفهم هذا المعنى الحما‬

) : ( ‫ آخر عن طرٌك النمطتٌن‬class ‫ لـ‬class ‫تتم وراثة‬

: ‫مثال‬
using System ;
namespace ConsoleApplication1
{
Class Employee
{
public string _Name ;
public int _Salary ;
public int _Age ;
public void show_data ( )

Console.WriteLine( " Show ");

Class Manager : Employee

public Enter_Data ( string name , int salary , int age )

ٕٓ٘
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

_Name = name ;

_Salary = salary ;

_Age = age ;

} ‫الحمول الـخاصة‬
public string Mang_name class A ‫بالـ‬
{
get
{
return _Name ;
}
}
}
class Product : Manager
{
Console.WriteLine(" show product data ");
}
class Program
{
static void Main ( )
{
Manager child = new Manager( ) ;
string n=Console.ReadLine( ) ;
int ag = int.Parse( Console.ReadLine ( ) ) ;
int sal = int.Parse( Console.ReadLine( ) ) ;
child. Enter_Data ( n , sal , ag ) ;
Console.WriteLine ( child.emp_name ) ;
Product p = new Product ( ) ;

ٕٓٙ
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫}‬
‫}‬
‫}‬
‫معنى هذا الكود أن ‪:‬‬

‫أنشؤنا ‪ class Employee‬وعرفّنا به الحمول الخاصة به ثم أنشؤنا ‪class Manager‬‬


‫وورثنا الـ ‪ Employee‬وأنشؤنا دالة تؤخذ المٌم من المستخدم وتضعها فً هذه الحمول ثم‬
‫أنشؤنا الخاصٌة ‪ get‬لتعٌد األسم‪.‬‬

‫فً الـ ‪ class Product‬ورثنا ‪ Manager‬فؤصبح الـ ‪ٌ Product‬رى كل ما بداخل الـ‬


‫‪ Manager‬والـ ‪ class‬الذي ٌرثة الـ ‪ Manager‬أٌضا‪ .‬فٌمكننا إستخدام كل الدوال‬
‫والحمول التً بداخل هذه الـ ‪ classes‬من خالل الـ ‪.Product‬‬

‫ٌمكن للـ ‪ class‬األبن رإٌة الخواص التً بداخل الـ ‪ class‬األب التً ٌكون الوصول‬
‫إلٌها ‪ public‬أو ‪ protected‬أو ‪ internal‬أو ‪ protected internal‬ماعدا‬
‫‪.private‬‬

‫عندما تكون خواص الوصول فً الـ ‪ class‬األب من النوع ‪ protected‬فإنه ال ٌمكن‬


‫ألي ‪ class‬آخر رإٌتها سوى الـ ‪ class‬الذي ٌرثه فمط‪.‬‬

‫‪ٕٓ7‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫إخفاء الدالة‬
‫إذا كان ٌوجد ‪ class‬اسمه ‪ A‬ثم ورثه ‪ class‬آخراسمه ‪ B‬وكان ٌوجد فً الـ ‪class A‬‬
‫دالة اسمها ) (‪ print‬وترٌد إنشاء دالة بنفس األسم فً الـ ‪ class B‬فٌمكنن إنشاء الدالة‬
‫وإستخدام الكلمة المحجوزة ‪ ،new‬لو لم تستخدم ‪ new‬وكتبت نفس الدالة بنفس االسم‬
‫لن ٌحدث خطؤ لكن سٌظهر لن تحذٌر وٌكتب لن البرنامج أن تستخدم كلمة ‪ new‬فً‬
‫الدالة التً تكون فً الـ ‪ class‬األبن التً تكون بنفس أسم الدالة التً فً الـ ‪ class‬األب‬
‫حتى تُخفً الدالة التً فً الـ ‪ class‬األب وتعمل على الدالة الجدٌدة‪.‬‬

‫مثال ‪:‬‬
‫‪class A‬‬
‫{‬
‫) (‪public void print‬‬
‫{‬
‫;)" ‪Console.WriteLine(" Hello‬‬
‫}‬
‫}‬
‫‪class B : A‬‬
‫{‬
‫) (‪public new void print‬‬
‫{‬
‫;)" ‪Console.WriteLine(" C#‬‬
‫}‬
‫}‬

‫أما فً حالة أنن أردت إستخدام نفس الدالة التً فً الـ ‪ class A‬بالكود الذي بداخلها فً‬
‫الـ ‪ class B‬نكتب نفس الدالة وكلمة ‪ new‬ثم نكتب بداخل الدالة الكلمة المحجوزة‬
‫) (‪ ،base.print‬الكلمة المحجوزة ‪ base‬تعمل على الـ ‪ class‬األب‪ ،‬تؤخذ نسخة منه‬

‫‪ٕٓ2‬‬
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

ً‫ األب ما عدا الحمول أو الدوال الت‬class ‫" أي أنها ترى كل ما بداخل الـ‬object"
.private ‫ٌكون الوصول إلٌها‬

: ‫مثال‬
class A
{
public void print( )
{
Console.WriteLine(" Hello ");
}
}
class B : A
{
public new void print( )
{
base.print( );
}
}
class Program
{
static void Main( )
{
B child = new B( );
child.print( );
}
}
Hello : ‫سٌطبع‬

ٕٓ9
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫( ‪) Interface‬‬

‫ذكرنا الـ ‪ interface‬سابما فً الوراثة‪ ،‬الـ ‪ interface‬هو عبارة عن حاوٌة لمجموعة‬


‫من الخصائص أو الدوال المكتوب رأسها فمط بدون كتابة جسم الدالة أي بدون كتابة‬
‫كود داخلها‪ ،‬فمط اسم الدالة فتكون مجردة‪ٌ ،‬مكننا وراثة هذا الـ ‪ interface‬لكن عند‬
‫إستدعاءه ٌتطلب تنفٌذ وكتابة األكواد بداخل كل الدوال‪.‬‬

‫طرٌمة الوصول للـ ‪ interface‬تكون ‪ public‬تلمائٌا فال ٌجب كتابة ‪ public‬بجانب‬


‫الدوال لكن نكتبها فً الـ ‪ class‬حتى نستطٌع رإٌتها خارج الـ ‪.class‬‬

‫ٌمكننا إنشاء الـ ‪ interface‬من خالل الكلمة ‪ interface‬وهً كلمة محجوزة فً‬
‫اللؽة‪.‬‬

‫ٌمكننا إنشاء أكثر من ‪ interface‬وٌمكننا أٌضا وراثة أكثر من ‪ interface‬فً نفس‬


‫الولت فهو ٌدعم الوراثة المتعددة‪.‬‬

‫كٌفٌة تعرٌفه ‪:‬‬

‫الطرٌمة المتعارؾ علٌها فً تعرٌؾ الـ ‪ interface‬أن أول حرؾ من اسم الـ‬
‫‪ٌ interface‬كون حرؾ ‪ i‬ثم ٌتبعه بالً االسم الذي ترٌده‪ ،‬هذا ؼٌر ضروري لكنها‬
‫الطرق المتداولة والمتعارؾ علٌها فً تعرٌفه‪.‬‬

‫ٌمكننا كتابة كلمة ‪ + interface‬اسمه‬

‫‪interface emp1‬‬
‫{‬
‫; ) ( ‪void print1‬‬
‫; ) ‪int sum ( int x , int y‬‬
‫ٕٓٔ‬
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

}
interface emp2
{
void print2 ( ) ;
int multi ( int x , int y ) ;
}
class A : emp1 , emp2
{
public void print2 ( )
{
Console.WriteLine( " employee 2 " ) ;
}
public void print1 ( )
{
Console.WriteLine( " employee 1 " ) ;
}
public int sum ( int x , int y)
{
return x + y ;
}
public int multi ( )
{
return x * y ;
}
}

‫ ثم‬Add ‫أو ٌمكننا إنشاإه من خالل الضؽط على اسم المشروع ونضؽط على كلمة‬
Interface ‫ ونختار‬New item ‫نختار‬

.‫ونكتب به الدوال التً نرٌد‬

ٕٔٔ
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫ٕٕٔ‬
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

: ‫مثال‬
interface functions

void eat( );

void drink( );

class Human : functions

public void eat( )

Console.WriteLine( " eating " ) ;

public void drink( )

Console.WriteLine(" drinking ");

ْ ‫ التً أُن ِش‬class ‫ٌجب تنفٌذ كل الدوال فً الـ‬


interface ‫ئت بداخل الـ‬

class ‫ أنه أمكننا إستخدام نفس الدالة بنفس األسم فً أكثر من‬interface ‫أهمٌة الـ‬
.interface ‫وبؤكثر من تنفٌذ من خالل وراثة الـ‬

ٕٖٔ
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫( ‪) Polymorphism‬‬

‫الـ ‪ polymorphism‬تُعد من أهم مفاهٌم البرمجة كائنٌة التوجه‪ ،‬والمعنى العام لها أننا‬
‫ٌمكننا إعادة إستخدام الدالة بنفس األسم داخل نفس الـ ‪ class‬أو ‪ class‬آخر بعدد المرات‬
‫التً نرٌدها‪.‬‬

‫وهً تنمسم إلى ‪:‬‬

‫‪OverLoading -1‬‬
‫هً عبارة عن إنشاء أكثر من دالة بداخل نفس الـ ‪ class‬بنفس األسم‪ ،‬لكن بشروط‬
‫معٌنة‪.‬‬

‫لنفترض أنه توجد دالة أسمها ‪ print‬وال تؤخذ ُمدخالت ونرٌد إنشاء دالة أخرى اسمها‬
‫‪ print‬فً هذه الحالة ٌجب أن نضٌؾ لها ُمدخل واحد على األلل مثل ) ‪print ( int x‬‬
‫حتى نمٌزها عن األخرى فً ولت اإلستدعاء وال ٌحدث تشتت للمترجم‪ ،‬الدالتان بنفس‬
‫األسم فكٌؾ ٌفرق بٌنهما؟!‬

‫فهو ٌعتبر الدالة التً تستدعٌها مجهولة ألنه لم ٌعرؾ أي منهما تمصد‪ ،‬لكن عند إضافة‬
‫ُمدخل فحٌنها سٌذهب إلى التً لصدتها أهً التً بمدخل أم ال‪.‬‬

‫لكن لن نضٌؾ ُمدخل لن نستخدمه بؽرض إضافة دالة جدٌدة بنفس األسم فهذا ؼٌر‬
‫صحٌح‪ ،‬تضٌؾ فمط ما تحتاج إلٌه فعلٌا فً الكود وما تستخدمه فمط‪.‬‬

‫أما إذا فً حالة أن الدالتٌن ٌؤخذان ُمدخل فٌجب أن نؽٌر نوع أحدهما‪ ،‬فمثال إذا كانت‬
‫الدالة ) ‪ sum ( int x‬فٌجب أن ٌكون نوع ال ُمدخل فً الدالة الجدٌدة أي نوع ؼٌر ‪،int‬‬
‫من الممكن أن ٌكون ‪ float‬أو ‪ double‬أو ‪.long‬‬

‫ٕٗٔ‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫بإختصار ال ٌجب أن ٌكون هنان دالتان متماثلتان فً نفس الـ ‪ٌ ،class‬جب أن ٌوجد‬
‫إختالؾ فً ُمدخالت أحدهما على األلل‪.‬‬

‫مالحظة ‪ :‬ال تحدث عملٌة الـ ‪ overloading‬لدالة ال تؤخذ ُمدخالت‪.‬‬

‫فً ولت إستدعاء الدالة و فور فتح لوس الدالة أثناء اإلستدعاء فإن برنامج الفٌجوال‬
‫ستودٌو ٌوضح لن أنه توجد دالتان بنفس األسم لكن أحدهما ال تؤخذ ُمدخالت بٌنما‬
‫األخرى تؤخذ ُمدخل وٌجب أن تمرر لها ال ُمدخل عند إستدعائها فً حالة أنن أخترت‬
‫إستدعاء من تؤخذ ُمدخل وٌجب أن ٌكون من نفس النوع الذي حددته‪ ،‬ونختار بٌنهما من‬
‫خالل األسهم ألعلى وألسفل‪.‬‬

‫ٕ٘ٔ‬
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

: ‫مثال‬
using System ;
namespace ConsoleApplication1
{
class Calculator
{
public void sum ( int x , int y )
{
Console.WriteLine( x + y );
}
public void sum ( int x , float y )
{
Console.WriteLine( x + y );
}
}
class Program
{
static void Main( )
{
Calculator ca = new Calculator ( );
ca.sum( 3 , 4 );
ca.sum( 5 , 4.2f );
//. float ‫ ألن ال ُمدخل‬f ‫أضفنا حرؾ‬
}
}
}

ٕٔٙ
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫‪Overriding -2‬‬
‫تتم عملٌة الـ ‪ override‬فً الوراثة‪ ،‬فً حالة وجود دالة ما فً ‪ class‬اسمه‬
‫‪ employee‬وورثت هذا الـ ‪ class‬فً ‪ class‬اسمه ‪ manager‬وترٌد إنشاء دالة‬
‫بداخل ‪ manager‬بنفس األسم فهذه تسمى ‪.override‬‬

‫وتستخدم الكلمة المحجوزة فً اللؽة " ‪ " virtual‬فً الدالة التً فً الـ ‪ class‬األب‪،‬‬
‫والكلمة المحجوز " ‪ " override‬فً الدالة التً بنفس األسم داخل الـ ‪ class‬األبن‪.‬‬

‫وتكون الدالتان متماثلتٌن تماما‪ ،‬فً األسم وعدد ال ُمدخالت ونوع ال ُمدخالت‪ ،‬وجسم‬
‫الدالة أو الكود الذي بداخل الدالة فً الـ ‪ class‬األب أو األبن تكتب به ما تشاء أو‬
‫الوظٌفة التً ترٌد تنفٌذها بالدالة‪.‬‬

‫مثال ‪:‬‬
‫; ‪using System‬‬

‫‪namespace ConsoleApplication1‬‬

‫{‬

‫‪class Employee‬‬

‫{‬

‫) ( ‪public virtual void print‬‬


‫{‬
‫;) " ‪Console.WriteLine ( " Show data of employee‬‬
‫}‬
‫}‬
‫‪class Manager : Employee‬‬
‫{‬
‫) ( ‪public override void print‬‬
‫‪ٕٔ7‬‬
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

{
Console.WriteLine( " Show data of manager " );
}
}
class Program
{
static void Main ( )
{
Manager M = new Manager ( );
M.print ( ); // show data of Manager
Employee E = new Employee ( );
E.print ( ); // show data of employee
}

ٕٔ2
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

) Abstract , Sealed , Partial (

abstract
ً‫ ) وعندما تؤت‬Method ( ‫ أو الدالة‬class ‫هً عبارة عن كلمة محجوزة تؤتً مع الـ‬
‫ ٌكون‬class ‫ ) أو نسخة من هذا الـ‬object ( ‫ فال ٌمكننا أن نؤخذ كائن‬class ‫مع الـ‬
.‫ أخرى‬classes ‫ أ ُنشًء لكً ٌخدم‬.‫فمط للوراثة‬

: ‫مثال‬
using System ;
namespace ConsoleApplication1
{
abstract class Emp
{
public int x ;
}
class Man : Emp
{
public int num
{
set
{
x = value ;
}
get
{
ٕٔ9
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫; ‪return x‬‬
‫}‬
‫}‬
‫}‬
‫‪class Program‬‬
‫{‬
‫) ( ‪static void Main‬‬
‫{‬
‫; ) ( ‪Emp e = new Emp‬‬
‫خطؤ ‪ ،‬ال نستطٌع أخذ نسخة منه ‪//‬‬
‫; ) ( ‪Man m = new Man‬‬
‫; ‪m.num = 2‬‬
‫سٌطبع ٕ ‪Console.WriteLine( m.num ) ; //‬‬
‫}‬
‫}‬
‫}‬
‫إذا الـ ‪ class‬الذي ٌكون ‪ abstract‬ممنوع التعامل المباشر معه فٌما عدا الوراثة‪.‬‬

‫النوع الثاني الذي يكون ‪ abstract‬هي الدوال ‪:‬‬


‫الدالة التً تكون ‪ abstract‬تكون أٌضا بداخل ‪ ،abstract class‬وتكون الدالة مجردة‬
‫أي رأس الدالة فمط بدون الكود داخلها‪ ،‬لكن بشرط أن من ٌرث هذا الـ ‪ٌ class‬جب أن‬
‫ٌكتب الكود بداخل هذه الدالة الـ ‪ ،abstract‬هً تشبه للـ ‪ interface‬إلى حد ما‪ .‬لكن‬
‫ال تخلط بٌن األثنٌن ألن تلن دالة ( ‪ ) method‬بٌنما هذا ‪.interface‬‬

‫وعند كتابة كود الدالة فً الـ ‪ class‬األبن ‪ ...‬نكتب نفس رأس الدالة ونكتب ‪override‬‬
‫عوضا عن ‪ abstract‬ثم نكتب الكود‪.‬‬

‫الفرق بٌن ‪ virtual‬و ‪: abstract‬‬

‫ٕٕٓ‬
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

.‫ أي ال تكون دالة مجردة‬virtual ‫ ٌجب أن نكتب كود الدالة التً تكون‬: virtual

.‫ أي تكون مجردة‬abstract ‫ ٌجب أال نكتب كود الدالة التً تكون‬: abstract

: ‫مثال‬
using System ;
namespace ConsoleApplication1
{
abstract class Emp
{
public abstract void print ( ) ; // abstract method
public virtual void view ( ) // virtual method
{
Console.WriteLine( " Hello " ) ;
}
}
class Manager : Emp
{
public override void print ( )
{
Console.WriteLine( " Show " ) ;
}
public override void view ( )
{
Console.WriteLine( " Hi " ) ;
}
}

ٕٕٔ
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫‪sealed‬‬
‫تؤتً مع تعرٌؾ الـ ‪ classes‬والدوال ( ‪ .) methods‬عندما تؤتً مع الـ ‪ class‬فهذا‬
‫ٌعنً أنه ممنوع وراثة هذا الـ ‪ ،class‬لكن ٌمكننا التعامل معه بطرٌمة عادٌة ونستطٌع‬
‫أخذ نسخ منه أو كائن ( ‪.) object‬‬

‫مثال ‪:‬‬
‫‪sealed class A‬‬
‫{‬

‫}‬
‫‪class B : A‬‬
‫{‬

‫}‬
‫سٌحدث خطؤ أثناء معالجة الكود ألنه ال ٌمكن وراثة الـ ‪ class‬الذي ٌكون ‪sealed‬‬

‫أما فً حالة الدوال ‪:‬‬

‫فالدالة التً تكون ‪ sealed‬فهذا ٌعنً أنه ال ٌمكن عمل ‪ override‬لهذه الدالة فً‬
‫‪ class‬آخر‪.‬‬

‫مثال ‪:‬‬
‫‪class A‬‬
‫{‬
‫) ( ‪public sealed override void print‬‬
‫{‬
‫; ) " ‪Console.WriteLine( " C#‬‬
‫}‬
‫}‬
‫‪class B : A‬‬
‫ٕٕٕ‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫{‬
‫) ( ‪public override void print‬‬
‫{‬
‫; ) " ‪Console.WriteLine( " Hello‬‬
‫}‬
‫}‬
‫سٌحدث خطؤ أثناء معالجة الكود ألنه ال ٌمكن عمل ‪ override‬لدالة ‪.sealed‬‬
‫فائدة ‪ sealed‬أنها تمنع إعادة إستخدام محتوٌات الـ ‪ class‬فً ‪ class‬آخر أو إعادة‬
‫إستخدام دالة بنفس األسم ونفس ال ُمدخالت فً ‪ class‬آخر‪.‬‬

‫‪partial‬‬
‫هً كلمة محجوزة فً اللؽة وتؤتً كلمة ‪ partial‬مع الـ ‪ classes‬وأٌضؤ مع الـ‬
‫‪ interface‬ومع ‪ struct‬وسنتطرق لشرح الـ ‪ struct‬الحما‪.‬‬

‫معناها أنه ٌمكننا تمسٌم الـ ‪ class‬أو الـ ‪ interface‬على أكثر من ملؾ‪ .‬أي ٌمكننا كتابة‬
‫‪ class‬بؤسم و ‪ class‬آخر بنفس األسم وبدوال مختلفة‪ ،‬بالطبع هذا ال ٌجوز فً الحالة‬
‫العادٌة لكن ٌكون متاحا عندما نستخدم ‪.partial‬‬

‫فً حالة إستخدامها مع الـ ‪: class‬‬

‫نكتب كل ‪ class‬فً مكان أو ملؾ مستمل عن اآلخر وبنفس األسم وبدوال مختلفة لكن‬
‫عند أخذ نسخة من هذا الـ ‪ class‬فإننا فً هذا الولت نتعامل مع ‪ class‬واحد أي أنه‬
‫ٌستدعً كل الدوال التً تكون فً كل الملفات معا‪.‬‬

‫تُكتب الكلمة لبل الـ ‪ class‬أو الـ ‪.interface‬‬

‫مثال ‪:‬‬
‫; ‪using System‬‬
‫‪namespace ConsoleApplication1‬‬
‫{‬
‫ٖٕٕ‬
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

partial class Circle


{
public void Show_Diagonal ( float R )
{
Console.WriteLine( R * 2 ) ;
}
}
partial class Circle
{
public float Circle_Area ( float R )
{
return 3.14f * R * R ;
}
}
class Porgram
{
static void Main ( )
{
Circle c = new Circle ( ) ;
c.Show_Diagonal ( 3.5 ) ;
c.Circle_Area ( 2.3 ) ;
}
}
.‫ستظهر كل الدوال والحمول التً تكون فً الملفٌن‬
.‫ الواحد على أكثر من ملؾ‬class ‫ونستطٌع كتابة الـ‬
‫ فإنه أٌضا ٌنمسم على أكثر من ملؾ لكن عند وراثة الـ‬interface ‫أما فً حالة الـ‬
interface ‫ فإنه ٌجب أن ننفذ ونكتب كل األكواد للدوال التً بداخل الـ‬interface
ً‫ لٌس ف‬interface ‫ الذي ورث الـ‬class ‫ لكن نكتبها فً الـ‬،‫الموجودة فً كل الملفات‬
.‫ نفسه ألنه ال ٌجوز كما عرفنا‬interface ‫الـ‬

ٕٕٗ
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

: ‫مثال‬
partial interface Ifunction
{
void print ( ) ;
}
partial interface Ifunction
{
void view ( ) ;
}
partial interface Ifunction
{
void show ( ) ;
}
class Test : Ifunction
{
public void print ( )
{
Console.WriteLine( " One " ) ;
}
public void view ( )
{
Console.WriteLine( " Two " ) ;
}
public void show ( )
{
Console.WriteLine( " Three " ) ;
}
}

ٕٕ٘
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫تمارٌن ‪:‬‬
‫أكتب برنامج لتخزٌن بٌانات موظفٌن ( ‪.) id, name , age , salary‬‬
‫;‪using System‬‬
‫‪namespace Test‬‬
‫{‬
‫‪class employee‬‬
‫{‬
‫ننشًء ‪ class‬اسمه ‪ employee‬وبما أننا سنخزن بٌانات‬
‫;‪employee[ ] emp‬‬ ‫أكثر من موظؾ أي أكثر من أوبجٌكت لهذا الكالس فإننا‬
‫;‪int size‬‬ ‫سنستخدم الـ ‪ array‬ألن الـ ‪ objects‬كلهم من نفس النوع‬
‫;‪int index‬‬ ‫أي كلهم ‪ class‬واحد وسنؤخذ منه أوبجٌكت‪ ،‬فنحدد حجم‬
‫;‪int id‬‬ ‫وعرفنا المتؽٌر‬
‫ّ‬ ‫المصفوفة من خالل الـ ‪،constructor‬‬
‫ٌعبر عن الـ ‪ index‬الذي سنضٌؾ بداخله‪.‬‬ ‫‪ index‬حٌث أنه ّ‬
‫;‪int age‬‬
‫;‪string name‬‬
‫;‪int salary‬‬
‫} {) (‪public employee‬‬
‫)‪public employee(int size‬‬
‫{‬
‫;‪this.size=size‬‬
‫;‪index = 0‬‬
‫;]‪emp=new employee[size‬‬
‫}‬
‫)‪public void add_employee(int id,string name,int age,int salary‬‬
‫{‬
‫;‪bool check = false‬‬ ‫هذه دالة اإلضافة حٌث أن كل ‪ٌ index‬كون‬
‫)‪for(int i=0;i<index;i++‬‬ ‫بداخله أوبجٌكت ٌحمل‬
‫{‬ ‫‪ id,name,age,salary‬أي البٌانات الخاصة‬
‫به‪ ،‬وبعدما نضٌؾ بٌانات موظؾ جدٌد نزٌد‬
‫)‪if(emp[i].id==id‬‬
‫الـ ‪ index‬بممدار ‪ 1‬لٌتحرن إلى المكان الذي‬
‫{‬ ‫ٌلٌه فً المصفوفة‪ ،‬لكن أوال نتحمك ما إذا كان‬
‫;‪check=true‬‬ ‫الـ ‪ id‬موجود مسبما أم ال‪.‬‬
‫;‪break‬‬

‫‪ٕٕٙ‬‬
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

}
}
if (check == true)
{
Console.WriteLine(" THis id is exist !! , please use an new id");
}
else
{
emp[index] = new employee();
emp[index].id = id;
emp[index].age = age;
emp[index].name = name;
emp[index].salary = salary;
++index;
}
}
public void search(int id)
{
bool check = false;
int emp_index = 0;
for(int i = 0; i<index ; i++)
{
if(emp[i].id==id)
{
check=true; ‫هذه الدالة للبحث عن موظؾ معٌن من‬
emp_index=i; ‫ الخاص به فإذا كان موجود‬id ‫خالل الـ‬
break; ‫فإنها تطبع البٌانات الخاصة به‬
}
}
if(check==true)

ٕٕ7
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

{
Console.WriteLine("\t This employee is exist");
Console.WriteLine("\t Employee id : "+emp[emp_index].id);
Console.WriteLine("\t Employee name :
"+emp[emp_index].name);
Console.WriteLine("\t Employee age :
"+emp[emp_index].age);
Console.WriteLine("\t Employee salary :
"+emp[emp_index].salary);
}
else
{
Console.WriteLine("\t \t This employee not exist");
}
}
public void delete(int id)
{
bool check=false;
‫هذه الدالة لحذؾ بٌانات موظؾ من‬
int emp_index=0; ‫ الخاص به‬id ‫المصفوفة من خالل الـ‬
for(int i=0;i<index;i++)
{
if(emp[i].id==id)
{
check=true;
emp_index=i;
break;
}
}
if (check == true)
{

ٕٕ2
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

for (int i = emp_index; i < index - 1; i++)


{
emp*i+ = emp*i + 1+;
}
--index;
}
else
Console.WriteLine("this id not exist");
}
public void print( )
{ ‫هذه الدالة لطباعة بٌانات كل الموظفٌن‬
for(int i = 0 ; i< index ; i++)
{
Console.WriteLine("\t Employee id : "+emp[i].id);
Console.WriteLine("\t Employee name : "+emp[i].name);
Console.WriteLine("\t Employee age : "+emp[i].age);
Console.WriteLine("\t Employee salary : "+emp[i].salary);
Console.WriteLine( ); Console.WriteLine( );
}
}
}
.Main ‫ثم آخرا نختبر هذا الكود فً دالة الـ‬
class Program
{
static void Main( )
{
employee emp = new employee( 5 );
emp.add_employee(1, "aaa", 25, 1500);
emp.add_employee(2, "bbb", 27, 2000);
emp.add_employee(3, "ccc", 32, 4000);
emp.add_employee(4, "ddd", 30, 3500);

ٕٕ9
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫سٌطبع بٌانات هذا الموظؾ ألنه موجود ‪emp.search(4); //‬‬


‫;)‪emp.delete(4‬‬
‫سٌطبع أن هذا الموظؾ غير موجود‪ ،‬حٌث أنه تم حذفه ‪emp.search(4); //‬‬
‫;) (‪emp.print‬‬
‫}‬
‫}‬
‫}‬

‫‪0‬‬ ‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪4‬‬


‫‪1,aaa,25,1500‬‬ ‫‪2,bbb,27,2000‬‬ ‫‪3,ccc,32,4000‬‬ ‫‪4,ddd,30,3500‬‬

‫ٖٕٓ‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫( ‪) Struct‬‬

‫هو عبارة عن بناء نوع جدٌد من البٌانات‪ٌ ،‬شبه الـ ‪ class‬فً التعرٌؾ لكن توجد بعض‬
‫اإلختالفات بٌنهما‪.‬‬

‫‪class‬‬ ‫‪struct‬‬
‫‪ٌ -‬دعم الوراثة‬ ‫‪ -‬ال ٌدعم الوراثة‬
‫‪ٌ -‬كون ‪ value type‬ولٌس‬
‫‪ٌ -‬كون ‪ reference type‬وعند‬ ‫‪ reference type‬مثل الـ ‪class‬‬
‫أخذ نسخة منه نستخدم الكلمة‬ ‫‪ ،‬عندما إستخدامه ال تحتاج إلى‬
‫المحجوزة ‪. new‬‬ ‫كلمة ‪. new‬‬
‫وبما أنه ‪ value type‬فهو أسرع‬
‫‪ٌ -‬مكن إعطاء لٌم إبتدائٌة للحمول‬ ‫من الـ ‪ class‬ألنه ٌخزن ‪inline‬‬
‫التً بداخله‬ ‫أو بنظام الـ ‪. stack‬‬
‫; ‪ ( int x = 10‬ممبول )‪.‬‬
‫‪ -‬ال ٌمكن إعطاء لٌم إبتدائٌة‬
‫للحمول التً بداخله‬
‫; ‪( public int x = 5‬هذا ؼٌر‬
‫ممبول)‪.‬‬
‫‪ٌ -‬كون كل أعضاإه ‪ public‬إلنن‬
‫لو أخفٌتهم لن تستطٌع إستخدامهم ‪.‬‬

‫‪ -‬ال ٌمكننا عمل ‪ override‬للدوال‬


‫التً بداخله ‪.‬‬

‫ٖٕٔ‬
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

‫ برنامج‬،class ‫ عندما ترٌد إنشاء برنامج ال ٌحتاج إلى خواص الـ‬struct ‫تستخدم الـ‬
.‫ وهو ٌُ َع ّد بناء نوع جدٌد من البٌانات‬،‫تُخزن به بعض البٌانات وربطها ببعضها‬

: ‫مثال‬
struct Test
{
public int x ;
public int y ;
public float z ;
}
class Program
{
static void Main( )
{
Test t ;
t.x = 5;
t.y =7 ;
t.z = 9.9f ;
Console.WriteLine( t.x + t.y + t.z ) ;
}

:ٕ ‫مثال‬
using System ;
namespace ConsoleApplication1
{
class TestClass
{
public int num1 ;
}
ٕٖٕ
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

struct TestStruct
{
public int num2 ;
}
class Program
{
static void Main ( )
{
TestStruct s1 = new TestStruct( ) ;
TestStruct s2 = s1 ;
s1.num2 = 100 ;
s2.num2 = 200 ;
TestClass c1 = new TestClass ( ) ;
TestClass c2 = c1 ;
c1.num1 = 300 ;
c2.num1 = 400 ;
Console.WriteLine( s1.num2 ) ;
Console.WriteLine( s2.num2 ) ;
Console.WriteLine( c1.num1 ) ;
Console.WriteLine( c2.num1 ) ;
}
}
}
: ‫الناتج‬

100

200

400

400

ٕٖٖ
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫لم تتؽٌر المٌم فً حمول الـ ‪ struct‬فكؤنه ٌؤخذ نسخة من المٌم الحمٌمٌة وٌؽٌر بها أما‬
‫التؽٌٌر الحمٌمً فً المٌم فً الذاكرة العشوائٌة لم ٌحدث‪ .‬بٌنما تؽٌرت المٌم فً حمول الـ‬
‫‪ class‬ألنه ٌعمل بـالـ ‪( reference‬المرجع) أي تتؽٌر المٌم األصلٌة ولٌست النسخة‬
‫منها‪.‬‬

‫ٖٕٗ‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫( ‪) Namespace‬‬

‫هً عبارة عن مجموعة من الـ ‪ٌ classes‬مكننا أن نستخدم الـ ‪ namespace‬لكً‬


‫ننظم الكود أكثر وٌكون مرتب ومفهوم‪ٌ ،‬مكن أن ٌتواجد أكثر من ‪ namespace‬فً‬
‫نفس المشروع‪ ،‬وٌمكن أن ٌوجد ‪ class‬فً ‪ namespace‬بنفس اسم ‪ class‬آخر فً‬
‫‪ namespace‬أخرى‪.‬‬

‫ٌتم إستخدامها عن طرٌك الكلمة المحجوزة ‪ namespace‬ثم األسم الذي نرٌده ونكتب‬
‫بداخلها كل الـ ‪ classes‬التً نرٌد‪.‬‬

‫وٌتم إستدعائها عن طرٌك الكلمة المحجوز ‪.using‬‬

‫فً بداٌة كل كود نكتب ‪ ،using System‬وكلمة ‪ System‬هً عبارة عن‬


‫‪ namespace‬تحتوي على العدٌد من الـ ‪ ،classes‬مثل ‪ Console‬الذي نستخدمه فً‬
‫عملٌة اإلدخال واإلخراج‪.‬‬

‫وٌتم إستدعاء ما بداخل كل ‪ namespace‬عن طرٌك النمطة ( ‪) .‬‬

‫فمثال إذا أردنا إستدعاء كل الـ ‪ classes‬التً بداخل ‪ System‬وإستدعاء دالة اإلخراج‬
‫أٌضا من ‪ Console‬فٌكون اإلستدعاء بهذا الشكل ‪:‬‬

‫; ) (‪System.Console.WriteLine‬‬

‫ٖٕ٘‬
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

: ‫مثال‬
using System ;
using Demo ;
namespace Test
{
class Program
{
static void Main ( )
{
Demo.Prog1 p1 = new Demo.Prog1 ( ) ;
p1.view( ) ;
Asd a = new Asd( ) ;
a.show( ) ;
Prog1 p2 = new Prog1 ( ) ;
p2.view ( ) ;
}
}
class Prog1
{
public void view( )
{
Console.WriteLine( " I'am Namespace Test Class Prog1 " ) ;
}
}
}
namespace Demo
{
class Prog1
{
public void view ( )

ٕٖٙ
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

{
Console.WriteLine( " I'am Namespace Demo Class Prog1 " ) ;
}
}
class Asd
{
public void show ( )
{
Console.WriteLine(" I'am Namespace Demo Class Asd " ) ;
}
}
}

ً‫ ف‬class ‫ لكً ٌذهب إلى الـ‬Demo.Prog1 ‫ كتبت‬Main ‫فً أول سطر داخل دالة الـ‬
namespace ‫ بنفس األسم فً الـ‬class ‫ التً أحددها ألنه ٌوجد‬namespace ‫الـ‬
ً‫ الذي كان ف‬class ‫ كان سٌذهب إلى الـ‬namespace ‫ فلو لم أحدد الـ‬،‫الرئٌسٌة‬

‫ آخر‬class ‫ ال ٌوجد‬Asd ‫ الذي اسمه‬class ‫ وبما أن الـ‬،‫ الرئٌسٌة‬namespace ‫الـ‬


.‫ التً تحتوٌه‬namespace ‫بنفس اسمه فؤستدعٌته مباشرة بدون الحاجة إلى تحدٌد الـ‬
.‫ بنفس الطرٌمة‬namespace ‫ كاملة بداخل‬namespace ‫ٌمكن أن نكتب‬
: ‫ونستدعٌها بهذا الشكل‬

using + ‫ األولى‬namespace ‫ اسم الـ‬+ ) . ( ‫ الداخلٌة‬namespace ‫; اسم الـ‬

: ‫مثال‬
using System ;
using Test1.Test2 ;
namespace Test1
{
class Program
{
ٕٖ7
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

static void Main ( )


{
Console.WriteLine( " Main Function " ) ;
}
}
namespace Test2
{
class Prog2
{
public void Show( )
{
Console.WriteLine( " Hello World " );
}
}
}
}

ٕٖ2
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫اإلستثناءات واألخطاء‬
‫( ‪) Errors and Exceptions‬‬

‫هً تلن األخطاء التً ٌمع بها المستخدم أو تحدث فً البرنامج أثناء تشؽٌله‪ ،‬ولها العدٌد‬
‫من األشكال‪ ،‬لكن ٌمكننا أن نتحكم فً ما سٌحدث عندما ٌمع أي خطؤ‪ ،‬فمثال عند لسمة‬
‫أي رلم على صفر فهذا ؼٌر صحٌح وسٌحدث خطؤ‪ ،‬أو عند إدخال لٌمة لمتؽٌر من نوع‬
‫مختلؾ عن نوع المتؽٌر مثل إدخال حرؾ أو نص فً متؽٌر نوعه ‪ int‬أو إضافة لٌم‬
‫بداخل مصفوفة أكثر من عدد عناصرها فكل هذه أخطاء‪ ،‬توجد العشرات من األخطاء‪.‬‬

‫ٌجب أن ٌكون الكود تحت تحكمنا الكامل به وال نترن مجاال إلحتمالٌة حدوث أي خطؤ‪.‬‬

‫حماٌة الكود من األستثناءات التً تحدث ٌكون عن طرٌك ‪.try , catch :‬‬

‫‪try‬‬
‫نكتب بداخلها الكود أو البرنامج المراد تنفٌذه ودائما ما ٌتبعها ‪ catch‬معناها فً حالة‬
‫حدوث أي خطؤ أو إستثناء نفذّ ما بداخل الـ ‪ٌ .catch‬مكنن أن تشبهها بـ ‪ if / else‬حتى‬
‫ٌتضح لن كٌفٌة عملها فمط‪.‬‬

‫‪catch‬‬
‫تلتمط األخطاء فً حالة حدوثها وٌمكننا كتبة أي كود نرٌد تنفٌذه فً حالة حدوث خطؤ‬
‫ما‪.‬‬
‫وٌمكن أن نستخدم أكثر من جملة ‪ catch‬متتالٌة‪.‬‬

‫‪ٕٖ9‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫‪finally‬‬
‫نكتب بداخلها كود نرٌد تنفٌذه فً حالة حدوث خطؤ أم ال‪ ،‬فما بداخلها سٌُنَفذّ تحت أي‬
‫ظرؾ وٌمكننا كتابتها أو اإلستؽناء عنها‪ ،‬فال ٌشترط كتابتها فً الكود مثل ‪ catch‬بعد‬
‫‪.try‬‬

‫ٌجب أال ٌخلو أي كود لنا بدون كتابة ‪ try , catch‬حتى نتجنب أي أخطاء‪.‬‬

‫توجد العدٌد من الـ ‪ classes‬الخاصة باألخطاء فً الـ ‪" System " namespace‬‬

‫مثل ‪:‬‬

‫‪Exception‬‬ ‫ٌظهر لن الخطؤ الذي حدث أثناء‬


‫تنفٌذ البرنامج‬
‫‪DivideByZeroException‬‬ ‫ٌظهر لن الخطؤ عندما تمسم أي رلم‬
‫على صفر‬
‫‪StackOverflowException‬‬ ‫ٌحدث هذا الخطؤ عندما تستدعً‬
‫دوال كثٌرة داخل بعضها‬
‫‪OutOfMemoryException‬‬ ‫ٌحدث عندما تمتلئ ذاكرة الكمبٌوتر‬
‫وال ٌوجد مكان فً الذاكرة للبرنامج‬
‫‪OverflowException‬‬ ‫وجود فائض فً العملٌات الحسابٌة‬
‫أو فً التحوٌل من نوع بٌانات لنوع‬
‫آخر ‪ .‬أو إدخال لٌمة أكبر من حجم‬
‫المتؽٌر ‪.‬‬
‫‪ApplicationException‬‬ ‫ٌحدث عند وجود خطؤ فً البرنامج‬
‫أثاء تشؽٌله‬
‫‪FormatException‬‬ ‫ٌحدث هذا الخطؤ عندما نوع معامل‬
‫الدالة أثناء اإلستدعاء ٌختلؾ عن‬
‫نوع المعامل أثناء إنشاإه‬

‫ٕٓٗ‬
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

‫ الخاصة‬classes ‫ فً فٌجوال ستودٌو وسٌظهر لن كل الـ‬Exception ‫ٌمكنن كتابة‬


.‫ منهم‬class ‫باألخطاء وإذا ولفت بالمإشر علٌها سٌظهر لن وظٌفة كل‬

: ‫مثال‬
using System ;
namespace ConsoleApplication1
{
class Program
{
static void Main ( )
{
try
{
int x = 5 ;
int y = 0 ;
Console.WriteLine( x / y ) ;
}
catch ( Exception Ex )
{
Console.WriteLine( Ex.message ) ;
}
finally
{
Console.WriteLine( " finished " );
}
}
}
}

ٕٗٔ
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫فً هذا البرنامج كتبنا الكود فً ‪ try‬ثم كتبنا ‪ catch‬وأخذنا كائن أو نسخة من الـ ‪class‬‬
‫الذي ٌسمى ‪ Exception‬ثم نطبع الرسالة التً بداخله عندما ٌحدث خطؤ‪ ،‬هذا الـ ‪class‬‬
‫شمولً أكثر فهو ٌعمل على أي خطؤ ٌحدث بعكس الـ ‪ classes‬األخرى تظهر األخطاء‬
‫التً تعبر عنها فمط‪.‬‬
‫فمثال ‪ٌ DivideByZeroException‬ظهر الخطؤ الذي ٌحدث عند المسمة على صفر‬
‫فٌما عدا ذلن لن ٌعمل‪ .‬أما ‪ٌ Exception‬ظهر أي خطؤ ٌحدث فً البرنامج‪.‬‬
‫ٌمكنن أال تؤخذ نسخة من أي ‪ class‬وتطبع رسالة خاصة بن‪.‬‬
‫مثال ‪:‬‬
‫‪try‬‬
‫{‬
‫; ‪int x = 8‬‬
‫; ‪int y = 9‬‬
‫; ) ‪Console.WriteLine( x + y‬‬
‫}‬
‫‪catch‬‬
‫{‬
‫; ) " ‪Console.WriteLine( " Error‬‬
‫تطبع أي شئ ترٌده أن ٌظهر عند حدوث أي خطؤ ‪//‬‬
‫}‬

‫ٕٕٗ‬
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

: ‫مثال‬
using System ;
namespace ConsoleApplication1
{
class Program
{
static void Main ( )
{
try
{
int x = 8 ;
int y = 3 ;
Console.WriteLine( x / y ) ;
}
catch ( DivideByZeroException D )
{
Console.WriteLine( D.message ) ;
}
catch (StackOverflowException S )
{
Console.WriteLine( S.message ) ;
}
catch (OverflowException O )
{
Console.WriteLine( O.message ) ;
}
catch (Exception E )
{
Console.WriteLine( E.message ) ;
}
}
}
}

ٕٖٗ
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫( ‪) Collections‬‬

‫الـ ‪ Collections‬هً عبارة عن مجموعة من الـ ‪ classes‬التً تساعدنا فً التحكم فً‬


‫البٌانات وكٌفٌة تخزٌن وإسترجاع هذه البٌانات‪ ،‬لبل ذلن كان كل شًء خاص بالبٌانات‬
‫ُممٌدا والتعامل معه ُمح َكم‪.‬‬

‫فمثال كانت المصفوفة ٌجب أن نحدد لها الحجم أثناء إنشائها وإذا أكتملت عناصرها‬
‫وأمتألت فال نستطٌع إضافة عنصر آخر وأنه ٌجب تحدٌد نوع المصفوفة وتكون كلها‬
‫من نفس النوع أي أنه إما تكون كل العناصر ‪ int‬أو ‪ string‬أو ‪ float‬وهكذا‪ .‬أما فً‬
‫الـ ‪ collections‬نستطٌع إضافة أي عنصر من أي نوع وحجم المصفوفة ٌكون‬
‫دٌنامٌكً أي أنه ٌزٌد تلمائٌا كلما أضفنا عنصر جدٌد‪.‬‬

‫لكً تستخدم الـ ‪ٌ collections‬جب أن تستدعً الـ ‪ namespace‬التً تسمى‬


‫‪ Collections‬وهً موجودة فً الـ ‪." System " namespace‬‬

‫ٌكون اإلستدعاء بهذا الشكل ‪:‬‬

‫; ‪using System.Collections‬‬

‫أحد هذه الـ ‪ classes‬هو ‪:‬‬

‫ٕٗٗ‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫‪Array List‬‬
‫هو عبارة عن ‪ٌ class‬خلك مصفوفة " ‪ " Array‬لكن ٌزٌد حجمها كلما أضفنا عنصر‬
‫جدٌد بها‪ ،‬وٌمكنه إستمبال أي نوع من البٌانات دون الحاجة إلى تعرٌؾ نوعه وٌمكن‬
‫المزج بٌن هذه البٌانات من حٌث النوع فٌمكننا إضافة ‪ string‬ثم العنصر الذي ٌلٌه‬
‫ٌكون ‪ int‬وهكذا‪ ،‬وٌتم إستدعاء هذا الـ ‪ class‬بالطرٌمة العادٌة‪.‬‬

‫إذا أردنا إنشاء مصفوفة دٌنامٌكٌة أي ٌتؽٌر حجمها كلما أضفنا عنصر نستخدم‬
‫‪ ArrayList‬ونؤخذ منه نسخة ونعمل على الدوال التً بداخله التً تمكننا من التحكم فً‬
‫المصفوفة بشكل كامل‪.‬‬

‫أوال طرٌمة إنشاء مصفوفة دٌنامٌكٌة ‪:‬‬

‫; ) ( ‪ArrayList arr = new ArrayList‬‬

‫أخذنا من الـ ‪ class‬نسخة أي أنشؤنا مصفوفة جدٌدة واسمها " ‪." arr‬‬

‫ومن الممكن أن نحدد حجم المصفوفة أٌضا من خالل تمرٌر المٌمة للـ ‪constructor‬‬
‫فٌعطً للمصفوفة لٌمة إبتدائٌة فمثال إذا حددت حجم المصفوفة ‪ 10‬وأمتألت وأردت أن‬
‫تضٌؾ العنصر جدٌد سٌزٌد حجمها تلمائٌا وذلن من خالل كلمة ‪ new‬فهً تنشًء‬
‫مصفوفة جدٌدة أكبر وتنسخ بها كل بٌانات المصفوفة المدٌمة ثم تُحذؾ المصفوفة‬
‫المدٌمة بالـ ‪ Garbage Collector‬الذي ٌعمل تلمائٌا‪.‬‬

‫بعكس لؽات مثل ‪ٌ C++‬جب أن تحذفها بنفسن بإستخدام كلمة ‪.delete‬‬

‫تحدٌد حجم المصفوفة ٌكون كالتالً ‪:‬‬

‫; ) ‪ArrayList arr = new ArrayList ( 10‬‬

‫ٕ٘ٗ‬
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

‫ تؤخذ المٌمة وتضعها كحجم‬set ‫ فهً تُمثِل الـ‬Capacity ‫أو من خالل الخاصٌة‬
: ً‫المصفوفة كاآلت‬

ArrayList arr = new ArrayList ( ) ;


arr.Capacity = 10 ;

." Add( ) " ‫ إلضافة عنصر فً المصفوفة نستخدم الدالة‬-

: ‫مثال‬
using System ;
using System.Collections ;
namespace Test
{
class Program
{
static void Main ( )
{
ArrayList arr = new ArrayList ( ) ;
arr.Add( " Hello " ) ;
arr.Add( 100 ) ;
arr.Add( ' R ' ) ;
arr.Add( 2,71 ) ;
foreach ( object i in arr )
{
Console.WriteLine( i ) ;
}
}
}
}
‫ فؤحد األؼراض األساسٌة للـ‬foreach ‫ لعرض محتوٌات المصفوفة نستخدم‬-
‫ وبما أن العناصر التً بداخل المصفوفة‬.collectios ‫ هو إستخدامها مع الـ‬foreach
ٕٗٙ
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫لٌست من نفس النوع فال ٌمكننا تحدٌد نوع العدّاد الذي ٌدور على العناصر بداخل‬
‫المصفوفة " ‪ " i‬بنوع مثل ‪ int‬أو ‪ ،string‬فنحدده بؤنه ‪ object‬أو ‪ var‬أو ‪.dynamic‬‬

‫‪ -‬لمعرفة عدد عناصر المصفوفة الحالٌة فً حالة أنن لم تحدد لها حجم معٌن‪ ،‬نستخدم‬
‫رجع حجم المصفوفة‪.‬‬ ‫الخاصٌة ‪ Count‬فهً تُمثِل ‪ get‬وت ُ ِ‬
‫سنعمل على نفس المثال السابك ‪:‬‬

‫; ) ‪Console.WriteLine( arr.Count‬‬

‫‪ -‬فً حالة أنن أردت إدخال عنصر فً مكان محدد فً المصفوفة نستخدم الدالة "‬
‫) (‪ " Insert‬وهذه الدالة تؤخذ المكان الذي تحدده للعنصر ولٌمة العنصر‪.‬‬

‫; ) " ‪arr.Insert( 3 , " Hi‬‬

‫لكن ٌجب أن ٌكون المكان الذي تحدده موجود فعلٌا فً المصفوفة حالٌا‪ ،‬أي أنه ٌوجد‬
‫عنصر فً هذا المكان لبل ذلن ألنن لو حددت موضع اإلدخال مكان لعنصر ؼٌر‬
‫موجود فسٌحدث خطؤ‪.‬‬

‫فمثال توجد مصفوفة بها العناصر اآلتٌة ‪:‬‬

‫‪Hello‬‬ ‫‪100‬‬ ‫‪R‬‬ ‫‪2.71‬‬ ‫‪true‬‬

‫حجم المصفوفة ‪ ،5‬فال ٌجوز أن تُدخل موضع لعنصر أكبر من ‪ 4‬ألن الترلٌم فً‬
‫المصفوفة ٌبدأ من صفر‪.‬‬
‫هذا فً حال تواجد عناصر فً المصفوفة‪ ،‬لو لم ٌوجد عناصر فً المصفوفة فال ٌمكنن‬
‫أن تضع مكان للعنصر فً الدالة ‪ Insert‬أكبر من صفر‪.‬‬

‫عندما لولنا أن ‪:‬‬

‫; ) " ‪arr.Insert( 3 , " Hi‬‬

‫‪ٕٗ7‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫ٌبدأ البحث عن الموضع المحدد من المكان صفر إلى أن ٌجده وٌزٌد حجم المصفوفة‬
‫بممدار عدد العناصر الجدٌدة فإذا كان ٌوجد عنصر فً هذا المكان ستنتمل كل العناصر‬
‫التً على ٌمٌنه بممدار خانة واحدة لكل عنصر فً جهة الٌمٌن فً الذاكرة‪.‬‬

‫فتكون المصفوفة بهذا الشكل ‪:‬‬

‫‪Hello‬‬ ‫‪100‬‬ ‫‪R‬‬ ‫‪Hi‬‬ ‫‪2.71‬‬ ‫‪true‬‬

‫‪ -‬لحذؾ عنصر معٌن من المصفوفة نستخدم الدالة ) (‪ RemoveAt‬وتؤخذ هذه الدالة‬


‫مكان العنصر الذي ترٌد حذفه فمط‪ ،‬وٌمل حجم المصفوفة بممدار ‪ .1‬وتنتمل العناصر‬
‫التً على ٌمٌن العنصر المحذوؾ بممدار خانة واحدة فً جهة الٌسار فً المصفوفة‪.‬‬

‫; ) ‪arr.RemoveAt( 3‬‬

‫ستُح َذؾ ‪Hi‬‬

‫‪ -‬لحذؾ عنصر معٌن عن طرٌك لٌمة العنصر ولٌس موضعه فً المصفوفة سنستخدم‬
‫الدالة ) ( ‪ Remove‬وتؤخذ لٌمة العنصر فمط‪.‬‬

‫; ) ‪Remove( R‬‬

‫سٌُح َذؾ الـ ‪R‬‬

‫‪ -‬إلضافة مجموعة من العناصر فً ولت واحد نستخدم الدالة ) ( ‪ٌ ،AddRange‬مكنها‬


‫أن تؤخذ مصفوفة أخرى وتضٌفها على المصفوفة المدٌمة‪ ،‬تُضاؾ فً آخر المصفوفة‪،‬‬
‫وتؤخذ اسم المصفوفة الجدٌدة فمط‪.‬‬

‫مثال ‪:‬‬

‫; ‪object * + test = , 1 , 50 , ' K ' , " XYZ " , 3.14 -‬‬

‫; ) ‪arr.AddRange( test‬‬

‫‪ٕٗ2‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫‪ -‬لحذؾ مجموعة من العناصر فً ولت واحد نستخدم الدالة ) (‪ RemoveRange‬وهً‬


‫تؤخذ موضع العنصر الذي ترٌد أن تبدأ بالحذؾ منه وموضع العنصر الذي ترٌد أن‬
‫تنتهً عنده‪.‬‬

‫; ) ‪RemoveRange( 2 , 5‬‬

‫ستحذؾ العناصر من ٕ إلى ٘ بالترتٌب‪.‬‬

‫إذا كان عندن مصفوفة وترٌد نسخ بعض العناصر من مصفوفة أخرى ‪ ...‬تستخدم‬
‫) (‪ GetRange‬وهً تؤخذ موضع أول عنصر تبدأ بنسخه وتؤخذ آخر موضع تنتهً‬
‫عنده‪.‬‬

‫; ) (‪ArrayList Test = new ArrayList‬‬

‫; ) ‪Test=arr.GetRange( 1 , 4‬‬

‫سخ العناصر من الموضع ٔ إلى الموضع ٗ فً المصفوفة المدٌمة " ‪ " arr‬إلى‬ ‫ستُن َ‬
‫المصفوفة الجدٌدة التً تسمى " ‪." Test‬‬

‫‪ -‬لحذؾ كل عناصر المصفوفة نستخدم الدالة ) ( ‪.Clear‬‬

‫; ) (‪arr.Clear‬‬

‫‪Stack‬‬

‫الـ ‪ stack‬هو عبارة عن ‪ class‬داخل الـ ‪ Collections‬مثل ‪ ArrayList‬لكنه ٌختلؾ‬


‫للٌال عنه‪ ،‬الـ ‪ stack‬هو مجرد مصفوفة لكنه ٌتعامل بطرق مختلفة إلضافة عناصر فً‬
‫المصفوفة أو إخراجها‪ ،‬حٌث تتم إضافة العناصر من آخر المصفوفة وتتم عملٌة‬
‫اإلخراج أٌضا من آخر المصفوفة‪ ،‬أي أن آخر عنصر ٌُضاؾ هو أول عنصر ٌخرج‪،‬‬

‫‪ٕٗ9‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫وأول عنصر ٌضاؾ هو آخر عنصر ٌخرج فٌتم عرض البٌانات التً بداخله بطرٌمة‬
‫عكسٌة‪.‬‬

‫وٌسمى الـ ‪ stack‬بــ ‪) Last in First Out ( LIFO‬‬


‫أو ‪) First In Last Out ( FILO‬‬

‫أي أن من ٌُضاؾ أوال ٌخرج آخرا أو من ٌُضاؾ آخرا ٌخرج أوال‪.‬‬

‫تعمل معظم التطبٌمات الضخمة بنظام الـ ‪ stack‬كالبحث فً جوجل حٌث تظهر لن أوال‬
‫آخر عملٌة بحث لمت بها‪ ،‬كما فً تطبٌك الفٌس بون تظهر لن فً ممدمة البحث آخر‬
‫عملٌة بحث لمت بها مسبما‪.‬‬
‫كما تعمل به الذاكرة المإلتة أٌضا‪.‬‬

‫ٌمكنن أن تفهم كٌفٌة عمل الـ ‪ stack‬بوضوح من خالل الشكل اآلتً ‪:‬‬
‫إذا أردت إخراج الكرة ( ٔ ) ٌجب أن تُخرج كرة ( ٖ ) أوال ثم كرة ( ٕ ) إلى أن‬
‫تصل إلى الكرة ( ٔ ) ‪.‬‬

‫إخراج‬ ‫إدخال‬

‫‪3‬‬

‫‪2‬‬

‫‪1‬‬

‫ٕٓ٘‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫ٌتم إنشاء الـ ‪ stack‬بالطرٌمة العادٌة مثل أي ‪ class‬آخر ‪.‬‬

‫; ) ( ‪Stack Test = new Stack‬‬

‫وٌمكنن أن تحدد حجمه أثناء اإلنشاء كما الـ ‪.ArrayList‬‬

‫; ) ‪Stack Test = new Stack ( 10‬‬

‫‪ -‬إلضافة عنصر بداخل الـ ‪ stack‬نستخم الدالة ) (‪ Push‬وهً تؤخذ لٌمة العنصر فمط‪.‬‬

‫; ) ‪Test.Push( 12‬‬

‫; )" ‪Test.Push(" H‬‬

‫; ) ‪Test.Push( 2.71‬‬

‫; ) ‪Test.Push( False‬‬

‫لطباعة ما بداخل الـ ‪ stack‬نستخدم ‪foreach‬‬

‫) ‪foreach( object i in Test‬‬

‫;) ‪Console.WriteLine( i‬‬

‫ناتج الطباعة ‪:‬‬

‫سٌبدأ بآخر لٌمة دخلت فً الـ ‪ stack‬فهو ٌعرض بٌاناته بطرٌمة عكسٌة‪.‬‬

‫‪False -‬‬

‫‪2.71 -‬‬

‫‪H-‬‬

‫‪12 -‬‬

‫ٕٔ٘‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫عند إخراج لٌمة من الـ ‪ stack‬ثم حذفها منه سنسنخدم الدالة ) (‪ Pop‬وال تؤخذ الدالة أي‬
‫ُمدخالت‪ ،‬تُخرج آخر عنصر دخل إلى الـ ‪ stack‬وتحذفه‪.‬‬

‫; ) (‪Test.Pop‬‬

‫إذا أردنا إظهار آخر لٌمة دخلت فً الـ ‪ stack‬بدون حذفها نستخدم الدالة ) (‪.Peek‬‬

‫; ) ) (‪Console.WriteLine( Test.Peek‬‬

‫‪ -‬أما لحذؾ كل عناصر الـ ‪ stack‬نستخدم الدالة ) (‪.Clear‬‬

‫; ) (‪Test.Clear‬‬

‫‪ -‬إذا أردنا التؤكد من وجود عنصر معٌن فً الـ ‪ stack‬نستخدم الدالة ) (‪Cotains‬‬
‫وترجع إما ‪ true‬أو ‪ false‬أي العنصر موجود أو ؼٌر موجود فً الـ ‪.stack‬‬

‫; ) ) ‪Console.WriteLine( Test.Contains( 12‬‬

‫سترجع ‪ true‬ألن الـ ٕٔ موجودة فً الـ ‪stack‬‬

‫; ) ) ‪Console.WriteLine( Test.Contains( 3‬‬

‫سترجع ‪ false‬ألن الـ ٖ ؼٌر موجودة فً الـ ‪.stack‬‬

‫‪ -‬لمعرفة عدد عناصر الـ ‪ stack‬نستخدم الخاصٌة ‪.Count‬‬

‫; ) ‪Console.WriteLine( Test.Count‬‬

‫; ‪using System‬‬
‫; ‪using System.Collections‬‬
‫‪namespace ConsoleApplication1‬‬
‫{‬
‫‪class Program‬‬
‫{‬
‫ٕٕ٘‬
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

static void Main( )


{
Stack st = new Stack ( );

st.Push(" Ali ");

st.Push(" Ahmed ");

st.Push(" Mahmoud ");

st.Push(" Khaled ");

st.Push(" Amr ");

Console.WriteLine( st.Count );

foreach( string i in st )

Console.WriteLine( i );

st.Pop( );

Console.WriteLine( st.Count );

foreach( string i in st )

Console.WriteLine( i );

}
}
}

‫ عناصر ثم طبعنا عدد العناصر الموجودة بالـ‬5 ‫ وأدخلنا به‬stack ‫فً هذا الكود أنشؤنا‬
‫ ثم حذفنا آخر عنصر دخل إلى الـ‬،‫ بعدها طبعنا كل العناصر بدون حذفها‬،stack
.‫ وطبعنا عدد العناصر مرة أخرى ثم طبعنا كل العناصر‬stack
.‫حاول أن تُخرج ناتج هذا الكود بدون أن تنفذه على البرنامج‬

ٕٖ٘
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫‪Queue‬‬

‫الـ ‪ queue‬هو عبارة عن ‪ class‬داخل الـ ‪ Collections‬وهو ٌشبه الـ ‪ stack‬حٌث أنه‬
‫مصفوفة أٌضا‪ ،‬ؼٌر أن الـ ‪ٌ queue‬تعامل مع البٌانات بطرٌمة مختلفة للٌال عن الـ‬
‫‪.stack‬‬

‫تتم إضافة العناصر من آخر المصفوفة وتتم عملٌة الحذؾ أو اإلخراج من أول‬
‫المصفوفة‪ ،‬أي أن آخر عنصر ٌُضاؾ هو آخر عنصر ٌُحذؾ "ٌخرج"‪ ،‬وأول عنصر‬
‫ٌضاؾ هو أول عنصر ٌُحذؾ "ٌخرج" وٌتم عرض البٌانات التً بداخله بطرٌمة عادٌة‬
‫ولٌست عكسٌة مثل الـ ‪ ،stack‬وٌسمى الـ ‪ queue‬بــ ‪) First in First Out ( FIFO‬‬
‫أي أن من ٌُضاؾ أوال ٌخرج أوال‪ .‬فهو ببساطة ٌشبه الطابور َمن ٌؤتً أوال ٌذهب أوال‪.‬‬

‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪4‬‬ ‫‪5‬‬

‫إذا أردت إخراج الـ ‪ 2‬فٌجب أن تُخرج الـ ‪ 1‬أوال ألنه ُخ ِزنَ فً الـ ‪ queue‬لبلها‪.‬‬
‫معظم دوال الـ ‪ queue‬تشبه دوال الـ ‪.stack‬‬

‫‪ -‬إلضافة عناصر داخل الـ ‪ queue‬نستخدم الدالة ) (‪ Enqueue‬وهً تعادل ‪Push‬‬


‫فً الـ ‪.stack‬‬
‫;) (‪Queue qu = new Queue‬‬
‫;)" ‪qu.Enqueue(" A‬‬
‫;) ‪qu.Enqueue( 100‬‬
‫;) ‪qu.Enqueue( 3.7‬‬

‫ٕٗ٘‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫‪ -‬لطباعة عناصر الـ ‪ queue‬نستخدم ‪ ،foreach‬وتخرج العناصر بنفس الترتٌب الذي‬


‫دخلت به‪.‬‬
‫) ‪foreach( object i in qu‬‬
‫;) ‪Console.WriteLine( i‬‬

‫‪ -‬إلخراج أول عنصر دخل فً الـ ‪ queue‬وحذفه نستخدم دالة ) (‪Dequeue‬‬


‫;) (‪qu.Dequeue‬‬

‫‪ -‬إلظهار أول عنصر ٌخرج من الـ ‪ queue‬بدون حذفه نستخدم دالة ) (‪Peek‬‬
‫;) (‪qu.Peek‬‬

‫‪ -‬لحذؾ كل عناصر الـ ‪ queue‬نستخدم دالة ) (‪Clear‬‬


‫;) (‪qu.Clear‬‬

‫‪ -‬للتؤكد من وجود عنصر ما داخل الـ ‪ queue‬نستخدم دالة ) (‪ Contains‬ونمرر لها‬


‫المٌمة التً نبحث عنها‪.‬‬
‫;) ) ‪Console.WriteLine( qu.Contains( 100‬‬
‫ستطبع إما ‪ true‬أو ‪.false‬‬

‫‪ -‬لمعرفة عدد عناصر الـ ‪ queue‬نستخدم الخاصٌة ‪.Count‬‬


‫;) ‪Console.WriteLine( qu.Count‬‬

‫ٕ٘٘‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫( ‪) Generics‬‬

‫الـ ‪ generic‬تتٌح لن إستخدام الـ ‪ classes‬والدوال بدون الحاجة إلى تعرٌؾ نوعها‬
‫مإلتا حتى لحظة إدخال لٌم لها‪ .‬وهذا ٌجعل األداء فً البرنامج أعلى وٌمكنن أن‬
‫تستبدل الـ ‪ classes‬التً استخدمتها فً الـ ‪ collections‬بالـ ‪ generic‬فهً متماثلة‬
‫تمرٌبا‪.‬‬

‫وإلستخدام الـ ‪ classes‬الموجودة بداخل هذه الـ ‪ namespace‬نستدعً الـ‬


‫‪ namespace‬كالتالً ‪:‬‬

‫;‪using System.Collections.Generic‬‬

‫تعرؾ الـ ‪ generic‬من خالل هذه العالمة > <‬

‫توجد بعض الـ ‪ generic classes‬مثل ‪:‬‬

‫> <‪List‬‬
‫هذا الـ ‪ class‬هو عبارة عن مصفوفة دٌنامٌكٌة تشبه الـ ‪ ArrayList‬فً الـ‬
‫‪ ،collections‬وٌتم تعرٌفها بهذا الشكل ‪:‬‬

‫;) ( >‪List <int> arr = new List <int‬‬

‫هذا الكود معناه أننا أنشؤنا مصفوفة اسمها ‪ arr‬ونوعها ‪ .int‬وتستطٌع إستمبال بٌانات‬
‫من النوع ‪ int‬فمط كما حددنا مسبما‪ .‬وكلما أدخلنا عناصر أكثر ٌزٌد حجمها تلمائٌا‪.‬‬

‫‪ٕ٘ٙ‬‬
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

: ‫إلضافة عنصر لها نكتب‬

arr.Add( 5 );

arr.Add( 2 );

‫ وبها دوال إضافٌة لٌست‬ArrayList ‫وبها معظم الدوال التً شرحتها مسبما فً الـ‬
‫ وتستخدم هذه الدالة فً ترتٌب المصفوفة‬Sort( ) ‫ مثل‬ArrayList ‫موجودة فً الـ‬
.‫تصاعدٌا‬

arr.Sort( );

.‫ وتستخدم هذه الدالة لعكس عناصر المصفوفة‬Reverse( ) ‫وتوجد بها أٌضا دالة‬

arr.Reverse( );

List< > ‫مثال على الـ‬

using System ;
using System.Collections.Generic ;
namespace ConsoleApp
{
public class Employee
{
string name ;
string mobile ;
public string _Name
{
get
{
return _Name ;
}
}

ٕ٘7
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

public string _Mobile


{
get
{
return _Mobile;
}
}
public Employee( string name , string mobile )
{
this.name = name;
this.mobile = mobile;
}
public override string ToString()
{
return name+" ( " + mobile + " ) " ;
}
}
class Program
{
static void Main( )
{
List<Employee> emp = new List<Employee>( ) ;
emp.Add( new Employee(" Ahmed ", " 01111111111 " ) );
// Constructor
emp.Add( new Employee(" Ali ", " 01222222222 " ) );
emp.Add( new Employee(" Mohamed ", " 01555555555 " ) );
emp.Add( new Employee(" Khaled ", " 01000000000 " ) );
foreach ( Employee x in emp )
Console.WriteLine( x );
}

ٕ٘2
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫}‬
‫}‬

‫فً هذا الكود أنشؤنا ‪ class‬اسمه ‪ Employee‬وبداخله حمل األسم ورلم التلٌفون‪،‬‬
‫وأنشؤنا ‪ٌ constructor‬ؤخذ األسم ورلم التلٌفون وٌضع المٌم فً الحمول‪ ،‬ثم عملٌة‬
‫‪ override‬للدالة ‪ ToString‬وهً دالة جاهزة فً اللؽة لطباعة النصوص‪ ،‬وجعلناها‬
‫ترجع األسم ورلم التلٌفون‪.‬‬
‫وأنشؤنا ‪ List‬وٌكون نوع الـ ‪ List‬هو ‪ Employee‬أي الـ ‪ class‬فهو ٌُع ّد كنوع بٌانات‬
‫جدٌد‪ ،‬ولكً نستطٌع إضافة عناصر للـ ‪ List‬من نفس نوع الـ ‪ Employee‬نستخدم‬
‫‪ new‬ثم نكتب اسم الـ ‪ constructor‬ونمرر له ال ُمدخالت‪ ،‬وفً عملٌة الطباعة‬
‫نستخدم ‪ foreach‬وٌكون نوع العدّاد إما اسم الـ ‪ class‬الذي ٌُع ّد نوع بٌانات والبٌانات‬
‫التً ستُطبع ستكون من نفس نوعه أو نستخدم ‪ object‬أو ‪ var‬أو ‪.dynamic‬‬

‫> <‪Stack‬‬

‫ٌعمل الـ ‪ generic stack‬بنفس كٌفٌة عمل الـ ‪ collection stack‬أول عنصر ٌدخل‬
‫فً المصفوفة هو آخر عنصر ٌخرج منها وآخر عنصر ٌدخل فً المصفوفة هو أول‬
‫عنصر ٌخرج منها‪ .‬وبه نفس الدوال التً فً الـ ‪.collection stack‬‬

‫;) ( >‪Stack<int> s = new Stack<int‬‬

‫; ) ‪s.Push( 10‬‬

‫; ) ‪s.Push( 20‬‬

‫; ) (‪s.Pop‬‬

‫‪ٕ٘9‬‬
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

s.Peek( ) ;

Console.WriteLine( s.Count ) ;

Queue< >

‫ حٌث العنصر‬collection queue ‫ بنفس كٌفٌة عمل الـ‬generic queue ‫ٌعمل الـ‬
‫ وبه نفس الدوال‬.‫الذي ٌدخل المصفوفة أوال ٌخرج أوال ومن ٌدخل آخرا ٌخرج آخرا‬
.collection queue ‫التً فً الـ‬

Queue <int> q = new Queue <int>( );

q.Enqueue( 1 ) ;

q.Enqueue( 3 ) ;

q.Enqueue( 20 ) ;

q.Dequeue( ) ;

Console.WriteLine( q.Count ) ;

ٕٙٓ
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫> <‪LinkedList‬‬

‫الـ ‪ LinkedList‬نوعان فردٌة ومزدوجة‬

‫الفردٌة ‪ ( :‬ؼٌر موجودة فً الـ ‪) Generics‬‬

‫هً عبارة عن سلسلة مترابطة من العناصر‪ ،‬تكون هذه العناصر مرتبطة مع بعضها‬
‫من خالل مإشرات فكل عنصر ٌُشٌر إلى مكان العنصر اآلخر الذي ٌلٌه‪ ،‬تكون هذه‬
‫العناصر ُمخزنة بطرٌمة عشوائٌة فً الذاكرة بعكس المصفوفة التً تحجز عدد من‬
‫االماكن فً الذاكرة بطرٌمة متتالٌة‪.‬‬

‫الـ ‪ linkedList‬تمكننا من اإلضافة أو الحذؾ فً منصؾ السلسلة بدون الحاجة إلى‬


‫تبدٌل أماكن عناصر أخرى‪ .‬لذا فهً أفضل من المصفوفة " ‪ " Array‬فً عملٌات‬
‫الحذؾ أو اإلضافة‪ ،‬فٌمكننا إضافة العناصر فً البداٌة أو المنتصؾ أو نهاٌة السلسلة‪،‬‬
‫أما فً عملٌات البحث عن عنصر ما فإنه ٌؤخذ ولت طوٌل ألنه كما للت فعناصرها‬
‫لٌست متتابعة فً الذاكرة بل إنها مبعثرة فً الذاكرة خاصة إذا كنت تبحث عن عنصر‬
‫فً منتصؾ السلسلة أو نهاٌتها‪.‬‬

‫أما المصفوفة فهً أسرع فً عملٌات البحث والوصول إلى العناصر ال ُمخزَ نة بها‪،‬‬
‫والـ ‪ linkedList‬ال تمتلًء أبدا‪ ،‬فكلما أضفت عنصر تضٌفه هً فً السلسلة بشكل‬
‫مباشر فهً لٌس لها حجم ثابت‪ ،‬أما المصفوفة ٌجب أن تحدد لها الحجم ولو لم تحدد لها‬
‫سخ بها المصفوفة‬ ‫شؤ مصفوفة جدٌدة بحجم أكبر وت ُن َ‬
‫الحجم فإنه كلما تُدخل عنصر بها ت ُن َ‬
‫المدٌمة ثم ت ُح َذؾ المدٌمة من خالل الـ ( ‪.GC ) Garbage collector‬‬

‫أما الـ ‪ LinkedList‬ال ٌكون لها حجم ثابت فكلما أضفت عنصر بها تشٌر إلٌه فمط‬
‫وعندئ ٍذ ٌضاؾ إلى السلسلة مباشرة‪ ،‬فالسلسلة الفردٌة ٌكون لها مإشر واحد ٌُشٌر إلى‬
‫العنصر الذي بعده‪ .‬وهً كما للت ؼٌر موجودة فً الـ ‪ Generics‬لكن شرحتها حتى‬
‫تستطٌع أن تفهم كٌفٌة عمل السلسلة المزدوجة‪.‬‬
‫ٔ‪ٕٙ‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫لنفترض أنه توجد سلسلة بها هذه العناصر ( ‪ ) 1 , 2 , 3 , 4 , 5‬ستكون بهذا الشكل ‪:‬‬
‫‪head‬‬

‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪4‬‬ ‫‪5‬‬

‫‪tail‬‬ ‫‪null‬‬

‫‪ null‬هً كلمة محجوزة فً اللؽة وتعنً ال شًء‪ ،‬أي أنه ال ٌوجد شًء بعد العنصر‬
‫األخٌر فً السلسلة‪.‬‬

‫‪ >--- head‬هو مإشر ٌشٌر إلى أول عنصر فً السلسلة‪.‬‬

‫‪ >--- tail‬هو مإشر ٌشٌر إلى آخر عنصر فً السلسلة‪.‬‬

‫فً حالة أن السلسلة ال ٌوجد بها عناصر فٌكون ‪ٌ head , tail‬إشران على ‪.null‬‬

‫وكما نرى كل عنصر ٌُشٌر إلى العنصر الذي بعده إلى أن نصل إلى آخر عنصر فً‬
‫السلسلة حٌث ٌُشٌر إلى ‪.null‬‬

‫‪ -‬فً حالة اإلضافة فً بداٌة السلسلة إضافة عنصر ( ‪ ) 6‬سٌكون بهذا الشكل ‪:‬‬
‫‪head‬‬

‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪4‬‬ ‫‪5‬‬

‫‪6‬‬ ‫‪tail‬‬
‫‪null‬‬

‫سنجعله ٌُشٌر إلى أول عنصر فً السلسلة وبعد ذلن نجعل الـ ‪ٌ head‬إشر علٌه وبذلن‬
‫ٌرتبط بالسلسلة وٌكون العنصر ‪ 6‬هو أول عنصر فً السلسلة‪.‬‬

‫ٕ‪ٕٙ‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫‪ -‬فً حالة اإلضافة فً منتصؾ السلسلة أو فً أي موضع آخر بخالؾ البداٌة والنهاٌة ‪:‬‬

‫أوال نحدد الموضع الذي نرٌد إضافة العنصر فٌه‪.‬‬


‫‪head‬‬

‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪4‬‬ ‫‪5‬‬

‫‪tail‬‬
‫‪6‬‬ ‫‪null‬‬

‫نجعل العنصر الجدٌد ٌُشٌر إلى العنصر التالً للموضع الذي حددناه‪.‬‬
‫‪head‬‬

‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪4‬‬ ‫‪5‬‬

‫‪null‬‬
‫‪6‬‬

‫وآخرا نجعل العنصر الذي ٌسبك الموضع المحدد أن ٌُشٌر إلى العنصر الجدٌد وهكذا‬
‫ٌضاؾ إلى السلسلة‪.‬‬

‫لو جعلنا العنصر الذي ٌسبك المكان المحدد أن ٌُشٌر أوال على العنصر الجدٌد ستمع‬
‫السلسلة من بعد هذا المكان ولن ٌبمى بها سوا العناصر التً تسبك الموضع المحدد‪.‬‬

‫ٖ‪ٕٙ‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫‪ -‬فً حالة اإلضافة فً النهاٌة ‪:‬‬


‫‪head‬‬

‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪4‬‬ ‫‪5‬‬

‫‪tail‬‬ ‫‪6‬‬

‫‪null‬‬

‫سنجعل آخر عنصر ٌُشٌر إلٌه ثم نإشر علٌه بـ ‪.tail‬‬

‫‪ -‬فً حالة الحذؾ من البداٌة ( أول عنصر ) ‪:‬‬


‫سنجعل الـ ‪ٌ head‬إشر على العنصر الذي ٌلً أول عنصر وبذلن ٌصبح العنصر‬
‫الجدٌد الذي ٌإشر علٌه الـ ‪ head‬هو أول عنصر فً السلسلة‬
‫‪head‬‬

‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪4‬‬ ‫‪5‬‬

‫‪tail‬‬ ‫‪6‬‬

‫‪null‬‬

‫ٗ‪ٕٙ‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫‪ -‬فً حالة الحذؾ من النهاٌة ( آخر عنصر ) ‪:‬‬


‫‪head‬‬

‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪4‬‬ ‫‪5‬‬

‫‪tail‬‬ ‫‪6‬‬

‫‪null‬‬

‫سنجعل العنصر الذي ٌسبك العنصر األخٌر ٌإشر مباشرة على ‪ null‬وبذلن ٌصبح هو‬
‫آخر عنصر فً السلسلة أي الـ ‪.tail‬‬

‫‪ -‬فً حالة الحذؾ من منتصؾ السلسلة أو أي مكان فً السلسلة بخالؾ البداٌة والنهاٌة‪:‬‬

‫أوال نحدد موضع العنصر الذي سنحذفه ثم نجعل العنصر الذي ٌسبمه ٌشٌر إلى العنصر‬
‫الذي ٌلً العنصر الذي سنحذفه‪.‬‬
‫لنفترض أنه توجد سلسلة بها العناصر التالٌة ( ‪) 1 , 2 , 3 , 4 , 5‬‬

‫ونرٌد حذؾ العنصر ‪3‬‬


‫‪head‬‬

‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪4‬‬ ‫‪5‬‬

‫‪tail‬‬ ‫‪null‬‬

‫٘‪ٕٙ‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫لنفترض أن هذه هً الذاكرة المإلتة ( ‪ ،) RAM‬وبما أن الذاكرة ت ُ ِ‬


‫خزن المٌم بها بطرٌمة‬
‫عشوائٌة وؼٌر مرتبة فٌمكن ان تكون السلسلة بهذا الشكل ‪:‬‬

‫‪1‬‬ ‫~‬ ‫~‬ ‫~‬ ‫~‬


‫~‬ ‫~‬ ‫~‬ ‫~‬
‫~‬ ‫‪3‬‬ ‫~‬
‫‪5‬‬ ‫~‬ ‫~‬ ‫~‬ ‫~‬
‫~‬ ‫~‬ ‫~‬ ‫~‬ ‫~‬
‫~‬ ‫~‬ ‫~‬ ‫~‬
‫~‬ ‫~‬ ‫~‬ ‫‪6‬‬ ‫~‬
‫~‬ ‫‪2‬‬ ‫~‬ ‫‪4‬‬ ‫~‬

‫‪ٕٙٙ‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫السلسلة المزدوجة ( ‪:) Double LinkedList‬‬

‫هً نفس السلسلة الفردٌة لكن اإلختالؾ بٌنهما أن المزدوجة ٌكون لها مإشران ولٌس‬
‫مإشرا واحدا‪ ،‬مإشر ٌشٌر إلى العنصر الذي بعده واآلخر ٌشٌر إلى الذي لبله‪.‬‬

‫‪2‬‬ ‫‪4‬‬ ‫‪6‬‬ ‫‪null‬‬

‫ُعرؾ ) ‪ class ( generic LinkedList‬بهذه الطرٌمة ‪:‬‬


‫ٌ ّ‬

‫; ) (> ‪LinkedList < DataType > Name = new LinkedList < DataType‬‬

‫فمثال لو كانت العناصر ‪: int‬‬

‫;) (> ‪LinkedList < int > Link = new LinkedList < int‬‬

‫‪ -‬فً حالة اإلضافة من البداٌة نستخدم الدالة ) (‪ AddFirst‬وهً تؤخذ لٌمة العنصر‬
‫فمط‪.‬‬

‫; ) ‪Link.AddFirst( 10‬‬

‫‪ -‬فً حالة اإلضافة فً نهاٌة السلسلة نستخدم الدالة ) (‪ AddLast‬وهً تؤخذ لٌمة‬
‫العنصر فمط‪.‬‬

‫; ) ‪Link.AddLast( 20‬‬

‫‪ -‬لحساب عدد عناصر السلسلة نستخدم الخاصٌة ‪.Count‬‬

‫; ) ‪Console.WriteLine( Link.Count‬‬

‫‪ٕٙ7‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫‪ -‬للبحث عن عنصر معٌن نستخدم الدالة ) (‪ Contains‬وتؤخذ لٌمة العنصر وهً تُرجع‬
‫‪ true‬أو ‪.false‬‬

‫; ) ) ( ‪Console.WriteLine( Link.Contains‬‬

‫‪ -‬لحذؾ عنصر من بداٌة السلسلة نستخدم الدالة ) (‪ RemoveFirst‬وال تؤخذ ُمدخالت‪.‬‬

‫; ) (‪Link.RemoveFirst‬‬

‫‪ -‬لحذؾ عنصر من نهاٌة السلسلة نستخدم الدالة ) (‪ RemoveLast‬ال تؤخذ ُمدخالت‪.‬‬

‫; ) (‪Link.RemoveLast‬‬

‫‪ -‬لحذؾ عنصر معٌن نستخدم الدالة ) (‪ Remove‬وهً تؤخذ العنصر الذي ترٌد حذفه‪،‬‬
‫ولو تكرر العنصر أكثر من مره فإنها تحذؾ أول عنصر تجده فً السلسلة الذي ٌحمل‬
‫هذه المٌمة‪.‬‬

‫مثال ‪:‬‬

‫توجد فً السلسلة هذه العناصر ( ‪ ) 1 , 2 , 3 , 4 , 5 , 3 , 6‬وأنت ترٌد حذؾ الـ ‪،3‬‬


‫ستحذؾ الدالة أول ‪ 3‬تمابلها فتكون السلسلة بهذا الشكل ( ‪.) 1 , 2 , 4 , 5 , 3 , 6‬‬

‫; ) ‪Link.Remove( 3‬‬

‫‪ٕٙ2‬‬
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

: ‫تمارٌن‬

.‫أنشًء برنامج إلستمبال بٌانات المرضى والدخول بؤولوٌة الحجز‬


using System;
using System.Collections.Generic;
namespace ConsoleApplication2
{
class patient : Ifunctions
{
. ‫تعرٌؾ بٌانات المرٌض‬
int age;
string name;
string mobile;
int id;
public int Age
{
set{ age = value; }
get{ return age; }
}
public string Mobile
{
set { mobile = value; }
get { return mobile; }
}

ٕٙ9
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

public string _Name


{
set { name = value; }
get { return name; }
}
public int Id
{
set { id = value; }
get{ return id; }
}
public patient( ) { }
public patient( int iD , string N , string M , int A )
{
. ‫ ) إلدخال بٌانات المرٌض‬constructor ( ‫ُمش ٌِ ّد‬
this.name = N;
this.mobile = M;
this.age = A;
this.id = iD;
}
Queue<patient> P = new Queue<patient>( );
‫ ألنه كما نعرؾ ٌعمل باألولوٌة فمن حجز أوال‬Generics Queue ‫أنشؤنا‬
class ‫ وٌكون نوعه هو نفس نوع الـ‬.‫ٌدخل أوال‬
.‫ هً التً ستُخَزن به‬class ‫حٌث أن بٌانات الـ‬

ٕ7ٓ
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫) ‪public void insert( int id , string name , string mobile , int age‬‬
‫{‬
‫دالة إلدخال بٌانات المرٌض ‪.‬‬
‫;‪bool check=false‬‬
‫) ‪for ( int i = 0; i < P.Count; i++‬‬
‫{‬
‫) ‪if ( id == P.ElementAt( i ).id‬‬
‫{‬
‫الدالة ) (‪ ElementAt‬إلرجاع البٌانات المحددة سواء كانت‬
‫( ‪) name , id , moblie‬‬
‫من خالل ترلٌم ( فهرس ) المرٌض ( العنصر ) فً المصفوفة‪.‬‬
‫فنبحث عن الرلم التسلسلً الجدٌد هل ٌطابك رلم تسلسلً لدٌم؟‬
‫إذا كان الرلم موجود من لبل فلن تتم عملٌة إضافة بٌانات المرٌض‬
‫حٌث ٌكون لكل مرٌض رلم تسلسلً ال ٌتكرر لمرٌض آخر‪.‬‬
‫;‪check = true‬‬
‫}‬
‫‪else‬‬
‫;‪check = false‬‬
‫}‬
‫) ‪if ( check == true‬‬
‫{‬
‫;)" ! ‪Console.WriteLine(" this id ( "+id+" ) is exist before , try again‬‬
‫}‬
‫‪else‬‬

‫ٔ‪ٕ7‬‬
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

{
P.Enqueue( new patient( id , name , mobile , age ) );
) Enqueue ( ‫ ك ُمدخل للدالة‬constructor ‫ لتنفٌذ الـ‬new ‫تُكتب‬
constructor ‫فٌُن َفذّ الـ‬
.‫وتكون البٌانات التً دخلت إلٌه ُمدخل للدالة‬
}
}

public bool Search( int id )


{
.ً‫دالة للبحث عن مرٌض من خالل رلمه التسلسل‬
bool check = false;
for ( int i = 0; i < P.Count; i++ )
{
if ( P.ElementAt( i ).id == id )
{
check = true;
}
}
return check;
}

ٕ7ٕ
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

public void delete( )


{
.‫دالة لحذؾ بٌانات أول مرٌض‬
P.Dequeue( );
}
public void print( )
{
.‫دالة لطباعة بٌانات كل المرضى‬
for ( int i = 0; i < P.Count; i++ )
{
Console.WriteLine("id : " + P.ElementAt( i ).id);
Console.WriteLine("name : " + P.ElementAt( i ).name);
Console.WriteLine("mobile : "+P.ElementAt( i ).mobile );
Console.WriteLine("age : " + P.ElementAt( i ).age);
Console.WriteLine( );
}
}
}
interface Ifunctions
{
void insert( int id , string name , string mobile , int age );
bool Search( int id );
void delete( );
void print( );
ٕ7ٖ
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

}
class Program
{
static void Main( )
{
try
{
patient pat = new patient( );
int id;
string name;
string mobile;
int age;
while (true)
{
Console.WriteLine("Enter 1 to insert patient data");
Console.WriteLine("Enter 2 to search on patient data");
Console.WriteLine("Enter 3 to delete patient data");
Console.WriteLine("Enter 4 to show all patient data");
Console.WriteLine(); Console.Write("Your choice is : ");
int i = int.Parse(Console.ReadLine( ));
switch ( i )
{
case 1:

ٕ7ٗ
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

Console.Write(" id : ");
id = int.Parse(Console.ReadLine( ));
Console.Write(" name : ");
name = Console.ReadLine( );
Console.Write(" mobile : ");
mobile = Console.ReadLine( );
Console.Write(" age : ");
age = int.Parse(Console.ReadLine( ));
pat.insert(id, name, mobile, age);
break;
case 2:
Console.Write("\t enter patient id :");
id = int.Parse(Console.ReadLine( ));
Console.WriteLine(pat.Search(id));
Console.WriteLine( );
break;
case 3:
pat.delete( );
break;
case 4:
pat.print( );
break;

ٕ7٘
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

default:
Console.WriteLine(" false choice ");
Console.WriteLine( );
break;
}
}
}
catch( Exception Ex )
{
Console.WriteLine( Ex.Message );
}
}
}
}

ٕ7ٙ
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫هياكل البيانات‬
‫( ‪) Data structures‬‬

‫هٌاكل البٌانات ( ‪ ) Data structure‬إنما هً فمط أسالٌب لتخزٌن البٌانات‬


‫وإستراجعها والبحث عنها وترتٌبها بطرق معٌنة‪ ،‬مثلما تحدثت سابما عن الـ ‪ stack‬والـ‬
‫‪ queue‬وأنهما مصفوفة عادٌة لكن نحن نتحكم فً طرٌمة إدخال وإسترجاع البٌانات‬
‫بشكل معٌن‪.‬‬

‫البحث ( ‪) Searching‬‬

‫توجد عدة طرق للبحث عن البٌانات منها ‪:‬‬


‫ٔ‪ -‬البحث الخطي ( ‪) Linear search‬‬
‫وهذه الطرٌمة تُعنً أنه ٌتم فحص كل العناصر من بداٌة أول عنصر فً المصفوفة إلى‬
‫آخر عنصر بها إلى أن ٌتم إٌجاد العنصر الذي نبحث عنه وربما ٌكون ؼٌر موجود فً‬
‫المصفوفة‪.‬‬
‫فمثال إذا كنا نبحث عن المٌمة ‪ 16‬فً مصفوفة ُمكونة من ‪ 10‬عناصر كما فً المثال‬
‫التالً فسٌتم فحص كل العناصر إلى أن ٌصل إلى المٌمة التً نبحث عنها " ‪." 16‬‬

‫‪0‬‬ ‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪4‬‬ ‫‪5‬‬ ‫‪6‬‬ ‫‪7‬‬ ‫‪8‬‬ ‫‪9‬‬

‫‪4‬‬ ‫‪2‬‬ ‫‪12‬‬ ‫‪8‬‬ ‫‪34‬‬ ‫‪76‬‬ ‫‪9‬‬ ‫‪15‬‬ ‫‪16‬‬ ‫‪100‬‬

‫هذه الطرٌمة فً البحث ؼٌر عملٌة وبطٌئة فً الحاالت التً تكون فٌها المصفوفة ذات‬
‫مساحة كبٌرة جدا ألنه ٌمر على كل عناصر المصفوفة‪ ،‬لذا فتكون كفاءة البرنامج ألل‬
‫ألنه ٌستهلن ولت أطول‪.‬‬
‫‪ٕ77‬‬
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

: ‫مثال‬
‫ عنصر وأضؾ لها لٌم عشوائٌة ثم أجعل ال ُمستخدم‬15 ‫أنشًء مصفوفة ُمكونة من‬
.linear search ‫ٌبحث عن لٌمة معٌنة بها بإستخدام‬
using System;
namespace First_program
{
class Program
{
static void Main( )
{
int[ ] arr = new int[ 15 ];
Random r = new Random( );
for ( int i = 0; i < arr.Length; i++ )
{
arr[ i ] = r.Next( ) % 10;
}
bool check = false;
int search = int.Parse(Console.ReadLine( ));
for( int i = 0 ; i <arr.Length ; i++ )
{
if (arr[ i ] == search)
{
Console.WriteLine(" Exist ");
check = true;
break;
}
}
if (check == false)
Console.WriteLine(" Not Exist ");
}

ٕ72
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫}‬
‫}‬

‫فً هذا الكود أنشؤنا مصفوفة بها ‪ 15‬عنصر ثم أستخدمنا ‪ Random‬وهو عبارة ‪class‬‬
‫ٌُستخدم لتولٌد لٌم عشوائٌة وأخذنا منه كائن (‪ )object‬وأستدعٌنا الدالة ) (‪ Next‬لتؤتً‬
‫لنا بالمٌم العشوائٌة وأستخدمنا " ‪ " %‬لنحدد المدى الذي ٌؤتً بالمٌم العشوائٌة منه‪ ،‬فمثال‬
‫إذا كتبنا ‪ %10‬فإنه ٌو ِل ّد لٌم من ‪ 0‬إلى ‪ 10‬فمط‪ ،‬وإذا كانت ‪ %50‬سٌو ِل ّد لٌم من ‪ 0‬إلى‬
‫‪ 50‬فمط وهكذا‪ ،‬أو ٌُمكنن تحدٌد مدى معٌن وتختار نمطة البداٌة والنهاٌة من خالل‬
‫الدالة ) ‪.Next( Start_Point , End_Point‬‬

‫مثل ) ‪ Next( 100 , 150‬سٌو ِل ّد أرلام فً المدى من ‪ 100‬إلى ‪ 150‬فمط‪.‬‬

‫ٕ‪ -‬البحث الثنائي أو المزدوج ( ‪) Binary search‬‬

‫وهو ٌموم على طرٌمة أنه ٌمسم المصفوفة إلى نصفٌن وٌمارن العنصر الذي تبحث عنه‬
‫بالعنصر الذي ٌكون فً منتصؾ المصفوفة فإذا كان أكبر منه فإنه ٌتجاهل كل العناصر‬
‫األلل منه وٌنتمل إلى العناصر األكبر من منتصؾ المصفوفة ثم ٌمسمهم إلى نصفٌن‬
‫وٌمارن منتصؾ المصفوفة الجدٌد بالعنصر الذي تبحث عنه فإذا كان ألل فإنه ٌتجاهل‬
‫الشك الً به عناصر أكبر وٌنتمل إلى العناصر األلل وٌظل ٌمسم العناصر وٌظهر‬
‫منتصؾ جدٌد وٌمارنه مرة أخرى مع العنصر الذي نبحث عنه إلى أن ٌصل إلٌه أو أنه‬
‫ٌكون ؼٌر موجود فً المصفوفة كلها‪ ،‬فهذه الطرٌمة أفضل فً عملٌات البحث عندما‬
‫تكون المصفوفة كبٌرة‪ ،‬هذا فً حالة أن المصفوفة كانت ُمرتبة ولو لم تكن ُمرتبة فٌجب‬
‫ترتٌبها أوال لتعمل علٌها هذه الطرٌمة‪.‬‬
‫ٌُمكنن ترتٌب العناصر بؤي طرٌمة تعرفها‪.‬‬
‫أو ٌمكنن إستخدام الدالة ) ‪ Sort( array_name‬وهً دالة جاهزة داخل ‪class‬‬
‫الـ ‪ Array‬تُستخدم لترتٌب المصفوفة ونمرر للدالة اسم المصفوفة المراد ترتٌبها فمط‪.‬‬

‫‪ٕ79‬‬
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

: ‫مثال‬
.binary search ‫ بإستخدام‬20 ‫أبحث عن المٌمة‬
ً‫منتصؾ المصفوفة األصل‬
20 >12
1 3 6 8 12 15 16 18 20 27

‫منتصؾ المصفوفة الجدٌد‬


20 >18
15 16 18 20 27

20 27

20

: ‫مثال‬
using System;
namespace ConsoleApplication3
{
class Program
{
static void Main( )
{
int[ + arr = new int*10+;
Random r = new Random( );

ٕ2ٓ
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

for ( int i = 0 ; i < arr.Length ; i++ )


{
arr[ i ] = r.Next( 30 , 100 );
} ‫ترتٌب‬
‫المصفوفة‬
Array.Sort( arr );
Console.Write(" enter target : ");
int target=int.Parse(Console.ReadLine( ));
int start = 0; ‫نمطة البداٌة‬
int end = arr.Length - 1 ; ‫األولى‬
while(start <= end)
{ ‫نمطة النهاٌة‬
int mid = (start + end )/ 2; ‫األولى‬

if( target == arr[mid] ) ‫منتصؾ‬


‫المصفوفة‬
{
Console.WriteLine("exist");
break;
}
else if( target < arr[mid] )
{
end = mid-1;
}
else
start = mid+1;
}
}
}
}

ٕ2ٔ
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫فً هذا الكود عرفّنا نمطة البداٌة ومررنا لها لٌمة إبتدائٌة صفر ونمطة النهاٌة وهً‬
‫تساوي طول المصفوفة نالص ‪ ،1‬ألنها تعبر عن الـ ‪ ( index‬الترلٌم ) حٌث ٌكون آخر‬
‫‪ index‬طول المصفوفة نالص ‪ ،1‬ثم جئنا بمنتصؾ المصفوفة حٌث ٌكون مجموع‬
‫نمطتً البداٌة والنهاٌة ممسوما على ‪ ،2‬ثم نمارن العنصر الذي نبحث عنه بؤول منتصؾ‬
‫للمصفوفة فإذا كان هو نفس العنصر فٌتولؾ وٌطبع ‪ Exist‬ما عدا ذلن سٌمارنه هل‬
‫العنصر الذي نبحث عنه أكبر من المنتصؾ أو ألل‪ ،‬إذا كان ألل فإنه سٌتجاهل كل‬
‫العناصر التً أكبر من منتصؾ المصفوفة وتصبح نمطة النهاٌة الجدٌدة هً منتصؾ‬
‫المصفوفة نالص ‪ ،1‬ونمطة البداٌة تظل كما هً ( صفر ) مإلتا‪.‬‬

‫ثم ٌخرج منتصؾ جدٌد للمصفوفة وتحدث علٌه نفس العملٌة وإذا كان العنصر الذي‬
‫نبحث عنه أكبر من المنتصؾ الجدٌد فستكون نمطة البداٌة الجدٌدة هً المنتصؾ الجدٌد‬
‫زائد ‪ ،1‬وتكون نمطة النهاٌة تحتفظ بآخر لٌمة ُم ِررت إلٌها طالما أن لٌمتها لم تتؽٌر‪.‬‬
‫وتظل تتكرر هذه العملٌة إلى أن ٌجد العنصر الذي تبحث عنه فً حالة أنه موجود فً‬
‫المصفوفة‪.‬‬
‫وهً تؤخذ ولت ألل ألنها ال تمر على كل العناصر فً المصفوفة‪.‬‬

‫ٕ‪ٕ2‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫الترتيب ( ‪) Sorting‬‬

‫هً عبارة عن عملٌة ترتٌب للبٌانات وٌوجد العدٌد من طرق الترتٌب‪ ،‬منها ‪:‬‬
‫ٔ‪Bubble Sort -‬‬

‫ٌتم الترتٌب بهذه الطرٌمة من خالل ممارنة كل عنصر بالذي ٌلٌه فإذا كان العنصر الذي‬
‫ٌلٌه أصؽر منه فإنه ٌبدل المٌمتٌن ببعضهما ثم ٌبدأ فً ممارنة العنصر الثانً بالثالث‬
‫وإذا كان العنصر الثالث أصؽر من الثانً فإنه سٌبدل المٌمتٌن وهكذا إلى أن ٌتم ترتٌب‬
‫المصفوفة أو السلسلة التً بها البٌانات وهذه الطرٌمة هً من أسهل طرق الترتٌب لكنها‬
‫تؤخذ ولت أطول وال ٌُفض ّل إستخدامها فً حالة البٌانات الكثٌرة جدا‪.‬‬
‫) ] ‪if ( arr[ j ] > arr[ j+1‬‬
‫) ] ‪swap ( arr[ j ] , arr[ j+1‬‬

‫‪1‬‬ ‫‪9 , 3 , 4 , 23 , 10 , 1 , 5‬‬


‫‪j j+1‬‬
‫‪2‬‬ ‫‪3 , 9 , 4 , 23 , 10 , 1 , 5‬‬

‫‪3‬‬ ‫‪3 , 4 , 9 , 23 , 10 , 1 , 5‬‬


‫‪1‬‬
‫‪4‬‬ ‫‪3 , 4 , 9 , 23 , 10 , 1 , 5‬‬

‫‪5‬‬ ‫‪3 , 4 , 9 , 10 , 23 , 1 , 5‬‬

‫‪6‬‬ ‫‪3 , 4 , 9 , 10 , 1 , 23 , 5‬‬

‫‪7‬‬ ‫‪3 , 4 , 9 , 10 , 1 , 5 , 23‬‬

‫ٖ‪ٕ2‬‬
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

1 3 , 4 , 9 , 10 , 1 , 5 , 23

2 3 , 4 , 9 , 10 , 1 , 5 , 23

3 3 , 4 , 9 , 10 , 1 , 5 , 23
2
4 3 , 4 , 9 , 10 , 1 , 5 , 23

5 3 , 4 , 9 , 1 , 10 , 5 , 23

6 3 , 4 , 9 , 1 , 5 , 10 , 23

7 3 , 4 , 9 , 1 , 5 , 10 , 23

.‫وتظل تتكرر هذه العملٌة إلى أن ٌتم ترتٌب المصفوفة‬

: ‫مثال‬
.Bubble ‫أكتب برنامج لترتٌب مصفوفة بطرٌمة‬
using System;
namespace Buuble_Sort
{
class Program
{
static void buuble( int[ ] arr )
{
for (int i = 0 ; i < arr.Length-1 ; i++)

ٕ2ٗ
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

{
for (int j = 0; j < arr.Length-1; j++)
{
if (arr[ j ] > arr[ j+1 ])
{
int temp = arr[ j ];
arr[ j ] = arr[ j+1 ];
arr[ j+1 ] = temp;
}
}
}
}
static void Main(string[ ] args)
{
int[ + x = , 5, 6, 2, 4, 1, 9, 3, 0 -;
buuble( x );
foreach ( int i in x )
Console.Write( i +" ");
}
}
}

: ‫الناتج‬
[0,1,2,3,4,5,6,9 ]

ٕ2٘
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫ٕ‪Selection Sort -‬‬

‫ٌتم الترتٌب بهذه الطرٌمة من خالل البحث عن أصؽر عنصر فً المصفوفة أو السلسلة‬
‫وتبدٌله مع أول عنصر فً المصفوفة ثم نبحث عن أصؽر فً المصفوفة لكن نبدأ من‬
‫بعد أول موضع فً المصفوفة ألننا بالفعل حصلنا على أصؽر عنصر فً المرة األولى‬
‫ثم نبدله مع العنصر الذي ٌكون فً الموضع الثانً فً المصفوفة وهكذا‪ ...‬إلى أن ٌتم‬
‫ترتٌب المصفوفة‪.‬‬
‫‪* 9 , 3 ,4 , 23 , 10 , 1 , 5 +‬‬

‫‪1‬‬ ‫‪9 , 3 , 4 , 23 , 10 , 1 , 5‬‬

‫‪2‬‬ ‫‪1 , 3 , 4 , 23 , 10 , 9 , 5‬‬

‫‪3‬‬ ‫‪1 , 3 , 4 , 23 , 10 , 9 , 5‬‬

‫‪4‬‬ ‫‪1 , 3 , 4 , 23 , 10 , 9 , 5‬‬

‫‪5‬‬ ‫‪1 , 3 , 4 , 5 , 10 , 9 , 23‬‬

‫‪6‬‬ ‫‪1 , 3 , 4 , 5 , 9 , 10 , 23‬‬

‫‪7‬‬ ‫‪1 , 3 , 4 , 5 , 9 , 10 , 23‬‬

‫‪ٕ2ٙ‬‬
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

: ‫مثال‬
.Selection ‫أكتب برنامج لترتٌب مصفوفة بطرٌمة‬
using System;
namespace Selection_Sort
{
class Program
{
static void Selection(int[ ] arr)
{
for (int i = 0; i < arr.Length - 1; i++)
{
int mini_index = i;
for (int j = i + 1; j < arr.Length; j++)
{
if (arr[ j ] < arr[ mini_index ])
mini_index = j;
}
int temp = arr[ mini_index ];
arr[ mini_index ] = arr[ i ];
arr[ i ] = temp;
}
}
static void Main(string[ ] args)
{
int[ + x = , 5, 6, 2, 4, 1, 9, 3, 0 -;
Selection( x );
foreach ( int i in x )
Console.WriteLine( i );
}
}
}

ٕ27
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫ٖ‪insertion sort -‬‬

‫تتم عملٌة الترتٌب بهذه الطرٌمة بإفتراض أن المصفوفة عبارة عن جزئٌن‪ ،‬جزء ُمرتب‬
‫والجزء اآلخر ال‪ ،‬بحٌث أن أول عنصر فً المصفوفة ٌُع ّد أول جزء ُمرتب فٌها ثم‬
‫ننتمل إلى العنصر الذي ٌلٌه فإذا كان أصؽر منه فنبدّل العنصرٌن ببعضهما ثم ننتمل إلى‬
‫العنصر الثالث ونمارنه ببالً العناصر ونضعه فً مكانه الصحٌح وٌتم نمل بالً‬
‫العناصر الؽٌر ُمرتبّة إلى الٌمٌن خطوة واحدة لكل عنصر‪ ،‬وتتكرر هذه العملٌة إلى أن‬
‫ٌتم ترتٌب المصفوفة‪.‬‬

‫‪* 9 , 3 ,4 , 23 , 10 , 1 , 5 +‬‬

‫‪1‬‬ ‫‪9 , 3 , 4 , 23 , 10 , 1 , 5‬‬

‫‪2‬‬ ‫‪3 , 9 , 4 , 23 , 10 , 1 , 5‬‬

‫‪3‬‬ ‫‪3 , 4 , 9 , 23 , 10 , 1 , 5‬‬

‫‪4‬‬ ‫‪3 , 4 , 9 , 10 , 23 , 1 , 5‬‬

‫‪5‬‬ ‫‪1 , 3 , 4 , 9 , 10 , 23 , 5‬‬

‫‪6‬‬ ‫‪1 , 3 , 4 , 5 , 9 , 10 , 23‬‬

‫‪ٕ22‬‬
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

: ‫مثال‬
.insertion ‫أكتب برنامج لترتٌب مصفوفة بطرٌمة‬
using System;
namespace insertion_sort
{
class Program
{
public static void insertion(int[ ] arr)
{
for (int i = 1; i < arr.Length; ++i)
{
int key = arr[i];
int j = i - 1;
while ( j >= 0 && arr* j ] > key )
{
arr[ j + 1 ] = arr[ j ];
j = j - 1;
}
arr[ j + 1 ] = key;
}
}
static void Main(string[ ] args)
{
int[ + x = , 6 , 7 , 2 , 3 , 5 , 1 , 0 };
insertion( x );
foreach ( int i in x )
Console.WriteLine( i );
}
}
}

ٕ29
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫ٗ‪Merge Sort -‬‬

‫ٌتم الترتٌب بهذه الطرٌمة من خالل تمسٌم المصفوفة إلى نصفٌن وتمسٌم كل نصؾ‬
‫منهما إلى نصفٌن وهكذا‪ ...‬حتى نحصل على كل عنصر فردي ثم بعد ذلن نعٌد دمجهم‬
‫مرة أخرى لكن بطرٌمة مرتبة‪ ،‬فتظل الدالة التً ترتبهم تستدعً نفسها بداخل نفسها فً‬
‫النصؾ األٌسر واألٌمن حتى ٌتم ترتٌب المصفوفة كاملة‪.‬‬

‫‪10‬‬ ‫‪7‬‬ ‫‪3‬‬ ‫‪2‬‬ ‫‪5‬‬ ‫‪9‬‬ ‫‪4‬‬

‫‪10‬‬ ‫‪7‬‬ ‫‪3‬‬ ‫‪2‬‬ ‫‪5‬‬ ‫‪9‬‬ ‫‪4‬‬

‫‪10‬‬ ‫‪7‬‬ ‫‪3‬‬ ‫‪2‬‬ ‫‪5‬‬ ‫‪9‬‬ ‫‪4‬‬

‫‪10‬‬ ‫‪7‬‬ ‫‪3‬‬ ‫‪2‬‬ ‫‪5‬‬ ‫‪9‬‬ ‫‪4‬‬

‫‪7‬‬ ‫‪10‬‬ ‫‪3‬‬ ‫‪2‬‬ ‫‪5‬‬ ‫‪4‬‬ ‫‪9‬‬

‫‪3‬‬ ‫‪7‬‬ ‫‪10‬‬ ‫‪2‬‬ ‫‪4‬‬ ‫‪5‬‬ ‫‪9‬‬

‫‪2‬‬ ‫‪3‬‬ ‫‪4‬‬ ‫‪5‬‬ ‫‪7‬‬ ‫‪9‬‬ ‫‪10‬‬

‫ٓ‪ٕ9‬‬
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

: ‫مثال‬
.Merge ‫أكتب برنامج لترتٌب مصفوفة بطرٌمة‬
using System;
namespace Merge_Sort
{
class Program
{
static void merge( int [ ]arr, int left, int middle, int right)
{
int size1 = middle - left + 1;
int size2 = right - middle;
int [ +L = new int *size1+;
int [ +R = new int *size2+;
for (int i = 0; i < size1; ++i)
{
L[ i ] = arr[ left + i ];
}
for (int j = 0; j < size2; ++j)
{
R[ j ] = arr[ middle + 1 + j ];
}
int index1 = 0, index2 = 0;
int k = left;
while (index1 < size1 && index2 < size2)
{
if (L[ index1 ] <= R[ index2 ])
{
arr[ k ] = L[ index1 ];
index1++;
}

ٕ9ٔ
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

else
{
arr[ k ] = R[ index2 ];
index2++;
}
k++;
}
while (index1 < size1)
{
arr[ k ] = L[ index1 ];
index1++;
k++;
}
while (index2 < size2)
{
arr[ k ] = R[ index2 ];
index2++;
k++;
}
}
static void sort(int [ ]arr, int left, int right)
{
if (left < right)
{
int middle = ( left + right ) /2;
sort(arr, left, middle);
sort(arr , middle+1, right);
merge(arr, left, middle, right);
}
}

ٕ9ٕ
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

static void Main(string[ ] args)


{
int[ + x = , 10,7,3,2,5,9,4-;
sort(x, 0, x.Length - 1);
foreach( int i in x )
Console.Write( i+" " );
}
}
}

ٕ9ٖ
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫‪Stack‬‬

‫الـ ‪ stack‬هو عبارة عن نظام معٌن أو طرٌمة معٌنة لتخزٌن البٌانات وإسترجاعها وال‬
‫ٌهم ما إذا كانت هذه البٌانات ستكون بـ ‪ Array‬أو ‪ ، Linked List‬فمثال نفرض أنها‬
‫مصفوفة‪ ،‬فتتم إضافة العناصر من آخر المصفوفة وتتم عملٌة اإلخراج أٌضا من آخر‬
‫المصفوفة‪ ،‬أي أن آخر عنصر ٌُضاؾ هو أول عنصر ٌخرج‪ ،‬وأول عنصر ٌضاؾ هو‬
‫آخر عنصر ٌخرج فٌتم عرض البٌانات التً بداخله بطرٌمة عكسٌة‪ ،‬وتعمل موالع‬
‫وتطبٌمات ضخمة بنظام الـ ‪ stack‬مثل ‪ google , youtube , facebook‬حٌث أن‬
‫آخر عملٌة بحث لمت بها تكون فً لمة عملٌات البحث‪.‬‬

‫وٌتم إختصار طرٌمة الـ ‪ stack‬بــ ‪) Last in First Out ( LIFO‬‬


‫أو ‪) First In Last Out ( FILO‬‬

‫أي أن من ٌُضاؾ أوال ٌخرج آخرا أو من ٌُضاؾ آخرا ٌخرج أوال‪.‬‬

‫إخراج‬ ‫إدخال‬

‫‪3‬‬

‫‪2‬‬

‫‪1‬‬

‫ٗ‪ٕ9‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫فً هذا الجزء لن نستخدم ‪ classes‬جاهزة فً اللؽة بل سننفذ كل شًء عن طرٌك‬


‫الكود ونعرؾ كٌفٌة تنفٌذ الـ ‪stack‬‬

‫فً حالة أن الـ ‪ stack‬فارغ‬

‫‪Stack‬‬

‫‪4‬‬

‫‪3‬‬

‫‪2‬‬

‫‪1‬‬

‫‪0‬‬

‫‪Top‬‬ ‫‪-1‬‬

‫المتؽٌر ‪ Top‬نستخدمه فً عملٌات اإلدخال واإلخراج فً الـ ‪ stack‬وتكون لٌمته‬


‫ُعبر عن الـ ‪ ( index‬الترلٌم ) الذي ٌمؾ عنده‪ .‬فإذا بدأ‬
‫اإلبتدائٌة = سالب ‪، 1‬حٌث ٌ ّ‬
‫ترلٌمه بصفر فذلن معناه أنه ٌمؾ عند أول موضع فً الـ ‪ stack‬أي أنه توجد لٌمة فً‬
‫الموضع ‪ .0‬فٌجب أن تبدأ لٌمته بسالب ‪.1‬‬

‫٘‪ٕ9‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫فً حالة إضافة أول عنصر للـ ‪Stack‬‬

‫‪Stack‬‬

‫‪4‬‬

‫‪3‬‬

‫‪2‬‬

‫‪1‬‬

‫‪Top‬‬ ‫‪0‬‬ ‫‪2000‬‬

‫‪-1‬‬

‫وعند إضافة عنصر للـ ‪ stack‬فإنه تزٌد لٌمة المتؽٌر ‪ Top‬بممدار ‪ 1‬أوال ثم تُضاؾ‬
‫المٌمة الجدٌدة‪ ،‬وآخر لٌمة ٌصل إلٌها الـ ‪ Top‬هً حجم المصفوفة ‪.1-‬‬

‫‪ٕ9ٙ‬‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫عند حذؾ عنصر من الـ ‪stack‬‬

‫‪Stack‬‬

‫‪Top‬‬ ‫‪4‬‬ ‫‪6000‬‬

‫‪3‬‬ ‫‪5000‬‬

‫‪2‬‬ ‫‪4000‬‬

‫‪1‬‬ ‫‪3000‬‬

‫‪0‬‬ ‫‪2000‬‬

‫‪-1‬‬

‫نُ ِ‬
‫خرج المٌمة أوال ثم تنمص لٌمة المتؽٌر ‪ Top‬بممدار ‪1‬‬
‫فً هذا المثال ستخرج المٌمة ‪ 6000‬أوال ثم ٌنزل الـ ‪ Top‬إلى العنصر الذي بعده‪.‬‬
‫تظل لٌمة الـ ‪ Top‬تمل كلما أخرجنا عنصر من الـ ‪ stack‬إلى أن ٌصبح الـ ‪stack‬‬
‫فارغ مجددا‪ ،‬أي تكون لٌمة الـ ‪ Top‬سالب ‪.1‬‬

‫فتكون بهذا الشكل ‪:‬‬

‫‪ٕ97‬‬
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

Stack

Top 3 5000

2 4000

1 3000

0 2000

-1

....‫وهكذا‬

: ‫مثال‬

using System;
namespace ConsoleApplication4
{
class Program
{
static void Main( )

ٕ92
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

{
Stack s = new Stack( 9 );
s.Push(1);
s.Push(7);
s.Push(5);
s.Push(4);
Console.WriteLine(s.Pop( )); // 4
Console.WriteLine(s.Pop( )); // 5
Console.WriteLine(s.Pop( )); // 7
s.Push(2);
Console.WriteLine(s.Pop( )); // 2
Console.WriteLine(s.Pop( )); // 1
Console.WriteLine(s.Pop( )); // stack is empty
}
}
class Stack
{ ‫متؽٌر لحساب عدد‬
int top; stack ‫عناصر الـ‬

int count;
int[ ] arr;
public Stack(int size) ) Constructor ( ‫ُمشٌ ّد‬
{ ،stack ‫ٌؤخذ مساحة الـ‬
top = -1; ‫ونضع به المٌمة اإلبتدائٌة لـ‬
count = size; 1 ‫ بسالب‬Top

arr = new int[count];


}
bool is_Empty( )
{
if (top == -1) ‫دالة تفحص ما إذا كان‬
return true; ‫ فارغ أم ال‬stack ‫الـ‬

ٕ99
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫‪else‬‬
‫;‪return false‬‬
‫}‬
‫) (‪bool is_Full‬‬ ‫دالة تفحص ما إذا كان‬
‫{‬ ‫الـ ‪ stack‬ممتلًء أم ال‬
‫) ‪if ( top == count – 1‬‬
‫;‪return true‬‬
‫‪else‬‬
‫;‪return false‬‬ ‫دالة تضٌؾ عناصر فً الـ‬
‫}‬ ‫‪ stack‬فتتؤكد أوال ما إذا كان‬
‫) ‪public void Push( int value‬‬ ‫ممتلًء أم ال‪ ،‬ألنه ال ٌجوز‬
‫{‬ ‫ممتلًء‬ ‫إضافة عناصر به وهو‬

‫)‪if (is_Full( ) == true‬‬


‫;)" ! ‪Console.WriteLine(" Stack is full‬‬
‫‪else‬‬
‫;‪arr[++top] = value‬‬
‫}‬
‫) (‪public object Pop‬‬
‫{‬ ‫دالة إلخراج عناصر من الـ‬
‫)‪if (is_Empty( ) == true‬‬ ‫‪ stack‬فتتؤكد أوال ما إذا كان‬
‫فارغ أم ال‪ ،‬ألنه ال ٌجوز إخراج‬
‫;" ‪return " Stack is empty‬‬
‫عناصر منه وهو فارغ‬
‫‪else‬‬
‫;] ‪return arr[ top - -‬‬
‫}‬
‫}‬
‫}‬

‫هذا مجرد شكل أولً للـ ‪ stack‬لٌُب ٌَن لن كٌفٌة تنفٌذه فمط‪ٌُ ،‬مكنن أن تضٌؾ به الدوال‬
‫التً ترٌدها وتُعد َّل به كٌفما تشاء‪.‬‬

‫ٖٓٓ‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫‪Queue‬‬

‫الـ ‪ٌ queue‬شبه الـ ‪ stack‬ؼٌر أن الـ ‪ٌ queue‬تعامل مع البٌانات بطرٌمة مختلفة للٌال‬
‫عن الـ ‪.stack‬‬

‫تتم إضافة العناصر من آخر المصفوفة وتتم عملٌة الحذؾ أو اإلخراج من أول‬
‫ضاؾ هو آخر عنصر ٌُح َذؾ "ٌخرج"‪ ،‬وأول عنصر‬ ‫المصفوفة‪ ،‬أي أن آخر عنصر ٌُ َ‬
‫ضاؾ هو أول عنصر ٌُح َذؾ "ٌخرج" وٌتم عرض البٌانات التً بداخله بطرٌمة عادٌة‬ ‫ٌُ َ‬
‫ولٌست عكسٌة مثل الـ ‪ ،stack‬وٌسمى الـ ‪ queue‬بــ ‪) First in First Out ( FIFO‬‬
‫أي أن من ٌُضاؾ أوال ٌخرج أوال‪ .‬فهو ببساطة ٌشبه الطابور َمن ٌؤتً أوال ٌذهب أوال‪.‬‬

‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪4‬‬

‫إذا أردت إخراج الـ ‪ 2‬فٌجب أن تُخرج الـ ‪ 1‬أوال ألنه ُخ ِزنَ فً الـ ‪ queue‬لبلها‪.‬‬

‫مثلما كان ٌوجد متؽٌر فً الـ ‪ٌُ stack‬ستخدم فً عملٌات اإلدخال واإلخراج اسمه ‪Top‬‬
‫فٌوجد أٌضا فً الـ ‪ queue‬متؽٌرات تُستخدم لعملٌات اإلدخال واإلخراج لكن فً الـ‬
‫‪ stack‬اإلدخال واإلخراج كان ٌحدث من نفس المكان فكان له مدخل واحد وأٌضا‬
‫المدخل كان نفسه هو المخرج أما فً الـ ‪ queue‬األمر مختلؾ للٌال حٌث تدخل‬
‫البٌانات من مكان وتخرج من مكان آخر‪ٌُ ،‬مكنن أن تشبهه بالطابور‪ ،‬أول شخص‬
‫ٌخرج من الطابور هو أول شخص فً الطابور ثم الذي ٌلٌه وهكذا‪ ،‬وإذا أراد شخص ما‬
‫الدخول فً الطابور فإنه ٌمؾ فً آخر الطابور‪ ،‬إذا ٌوجد مكان للدخول ومكان مختلؾ‬
‫للخروج من الطابور‪ ،‬فً هذه الحالة سنحتاج إلى متؽٌرٌن ولٌس متؽٌر واحد‪ ،‬متؽٌر‬
‫مسئول عن إدخال العناصر ومتؽٌر مسئول عن إخراجها‪.‬‬
‫ٌُمكنن تسمٌة المتؽٌرات بؤي اسم فهً مجرد متؽٌرات‪.‬‬

‫ٖٔٓ‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫فً حالة إذا كان الـ ‪ queue‬فارغ‬

‫‪First‬‬ ‫‪-1‬‬

‫‪Last‬‬ ‫‪-1‬‬

‫ُعبر عن أن الـ ‪ queue‬فارغ‪.‬‬


‫ونعطً لهم لٌم إبتدائٌة أٌضا بسالب ‪ 1‬فذلن ٌ ّ‬

‫‪ -‬عند إضافة أول عنصر فً الـ ‪ٌ queue‬تحرن المتؽٌر ‪ Last‬إلى أول خانة فً الـ‬
‫‪ queue‬أي تزٌد لٌمته بممدار ‪ 1‬فتصبح ‪ 0‬وذلن هو أول ترلٌم فً المصفوفة‪.‬‬

‫‪Last = 0‬‬

‫‪120‬‬

‫‪First‬‬ ‫‪-1‬‬

‫تظل لٌمة المتؽٌر ‪ First‬كما هً سالب ‪ 1‬ألننا لم نخرج أي لٌم فٌظل والؾ خارج‬
‫الـ ‪.queue‬‬
‫‪ -‬عند إضافة عنصر آخر للـ ‪queue‬‬

‫‪Last = 4‬‬

‫‪120‬‬ ‫‪50‬‬ ‫‪30‬‬ ‫‪80‬‬ ‫‪15‬‬

‫‪First‬‬ ‫‪-1‬‬

‫ٕٖٓ‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫وهكذا‪...‬‬
‫ٌمتلًء الـ ‪ queue‬فً حالة أن الـ ‪ٌ Last‬ساوي طول الـ ‪ queue‬نالص ‪ 1‬والـ ‪First‬‬
‫ٌساوي سالب ‪.1‬‬

‫‪ -‬عند إخراج عنصر من الـ ‪ queue‬تزٌد لٌمة الـ ‪ First‬بممدار ‪ 1‬أي تصبح لٌمته ‪0‬‬
‫وعندها ٌخرج أول عنصر فً الـ ‪.queue‬‬

‫‪First = 0‬‬ ‫‪Last = 4‬‬

‫‪50‬‬ ‫‪30‬‬ ‫‪80‬‬ ‫‪15‬‬

‫وعند إخراج عنصر آخر تحدث نفس العملٌة فتزٌد لٌمة الـ ‪ First‬بممدار ‪ 1‬فً كل مرة‬
‫ُخرج العنصر التالً‪.‬‬
‫وٌ ِ‬

‫‪Last = 4‬‬

‫‪First = 4‬‬

‫فً الحالة العادٌة ال ٌُمكنن أن تضٌؾ عنصر آخر طالما أن الـ ‪ٌ Last‬مؾ عند آخر‬
‫خانة فً الـ ‪ queue‬حتى إذا كان الـ ‪ queue‬فارغ‪.‬‬

‫ٌوجد نوع آخر من الـ ‪ٌُ queue‬سمى ‪ Circular queue‬وفً هذا النوع تستطٌع‬
‫إضافة عناصر أخرى حتى إذا كان الـ ‪ٌ Last‬مؾ عند آخر خانة فً الـ ‪ queue‬فهو‬
‫سٌعمل بطرٌمة دائرٌة فإذا كان أول عنصر فً الـ ‪ queue‬لد خرج فإن الـ ‪ٌ Last‬عود‬
‫إلى أول خانة وٌُضٌؾ فٌها‪.‬‬

‫ٖٖٓ‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫ٌُمكنن أن تشبهه بهذا الشكل ‪:‬‬

‫‪Last = 12‬‬ ‫‪0‬‬

‫‪89‬‬

‫‪110‬‬

‫‪10‬‬
‫‪70‬‬

‫‪35‬‬
‫‪19‬‬
‫‪80‬‬ ‫‪65‬‬
‫‪100‬‬

‫‪7‬‬
‫‪First = 4‬‬

‫فً هذه الحالة إذا أردت إضافة عنصر جدٌد فٌجب أن ترجع لٌمة الـ ‪ Last‬إلى ‪ 0‬مرة‬
‫أخرى‬

‫ٖٗٓ‬
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

Last = 0
0

17
89

110

10
70

35
19
80 65
100

7
First = 4

ٖٓ٘
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫ُخرج عناصر من الـ ‪ queue‬إلى أن وصل إلى آخر‬


‫وأٌضا فً حالة أن الـ ‪ First‬ظل ٌ ِ‬
‫خانة فً الـ ‪ queue‬فإن أٌضا لٌمته ترجع إلى صفر فً حالة أنن أردت إخراج‬
‫عناصر أخرى‪.‬‬
‫‪Last = 1‬‬

‫‪First = 0‬‬

‫‪0‬‬

‫‪30‬‬

‫‪10‬‬

‫‪7‬‬

‫نستخدم هذه المعادلة لجعل الـ ‪ queue‬دائري مثلما ذكرت ‪:‬‬


‫فً حالة الـ ‪Last‬‬
‫;‪last = (last + 1) % queue_Length‬‬

‫فً حالة الـ ‪First‬‬


‫;‪First = (First + 1) % queue_Length‬‬

‫الـ ‪ queue_Length‬أي طول الـ ‪ queue‬أو المصفوفة بشكل عام‪.‬‬


‫‪ٖٓٙ‬‬
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

: ‫مثال‬

using System;
namespace ConsoleApplication4
{
class Program
{
static void Main( )
{
Queue q = new Queue(5);
q.Enqueue(12);
q.Enqueue(5);
q.Enqueue(8);
Console.WriteLine( q.Dequeue());
Console.WriteLine(q.Dequeue());
Console.WriteLine(q.Dequeue());
q.Enqueue(12);
q.Enqueue(10);
Console.WriteLine(q.Dequeue());
}
}
class Queue
{
int first;
int last; ‫متؽٌر لحساب عدد عناصر‬
int count = 0; ‫ وتزداد لٌمته‬queue ‫الـ‬
‫كلما أضفنا عنصر وتمل‬
int length;
‫لٌمته كلما أخرجنا عنصر‬
int[ ] arr;

ٖٓ7
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

public Queue(int size)


) Constructor ( ‫ُمشٌ ّد‬
{ ،queue ‫ٌؤخذ مساحة الـ‬
first = -1; ‫ونضع به المٌمة اإلبتدائٌة لـ‬
last = -1; 1 ‫ بسالب‬first , last
length = size;
arr = new int[ length ];
}
bool is_Empty( )
{ ‫دالة تفحص ما إذا كان‬
if ( count == 0 ) ‫ فارغ أم ال‬queue ‫الـ‬
return true;
else
return false;
}
bool is_Full( )
{
‫دالة تفحص ما إذا كان‬
if (count == length) ‫ ممتلًء أم‬queue ‫الـ‬
return true; ‫ال‬
else
return false;
}
public void Enqueue( int value ) ً‫دالة إلدخال عناصر ف‬
{ queue ‫الـ‬
if (is_Full( ) == true)
Console.WriteLine(" Queue is full ! ");
else
{
last = ( last + 1 ) % length;
count++;

ٖٓ2
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

arr[ last ] = value;


}
}
public object Dequeue( )
{ ‫دالة إلخراج عناصر‬
queue ‫من الـ‬
if (is_Empty( )==true)
return " Queue is empty";
else
{
first = ( first + 1 ) % length;
count- - ;
return arr[ first ];
}
}
}
}

ٖٓ9
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫‪LinkedList‬‬

‫هً عبارة عن سلسلة مترابطة من العناصر‪ ،‬تكون هذه العناصر مرتبطة مع بعضها‬
‫من خالل مإشرات فكل عنصر ٌُشٌر إلى مكان العنصر اآلخر الذي ٌلٌه‪ ،‬تكون هذه‬
‫العناصر ُمخزنة بطرٌمة عشوائٌة فً الذاكرة بعكس المصفوفة التً تحجز عدد من‬
‫االماكن فً الذاكرة بطرٌمة متتالٌة‪.‬‬

‫الـ ‪ linkedList‬تمكننا من اإلضافة أو الحذؾ فً منصؾ السلسلة بدون الحاجة إلى‬


‫تبدٌل أماكن عناصر أخرى‪ .‬لذا فهً أفضل من المصفوفة " ‪ " Array‬فً عملٌات‬
‫الحذؾ أو اإلضافة‪ ،‬فٌمكننا إضافة العناصر فً البداٌة أو المنتصؾ أو نهاٌة السلسلة‪،‬‬
‫أما فً عملٌات البحث عن عنصر ما فإنه ٌؤخذ ولت طوٌل ألنه كما للت فعناصرها‬
‫لٌست متتابعة فً الذاكرة بل إنها مبعثرة فً الذاكرة خاصة إذا كنت تبحث عن عنصر‬
‫فً منتصؾ السلسلة أو نهاٌتها‪.‬‬

‫أما المصفوفة فهً أسرع فً عملٌات البحث والوصول إلى العناصر ال ُمخزَ نة بها‪،‬‬
‫والـ ‪ linkedList‬ال تمتلًء أبدا‪ ،‬فكلما أضفت عنصر تضٌفه هً فً السلسلة بشكل‬
‫مباشر فهً لٌس لها حجم ثابت‪ ،‬أما المصفوفة ٌجب أن تحدد لها الحجم ولو لم تحدد لها‬
‫سخ بها المصفوفة‬ ‫الحجم فإنه كلما تُدخل عنصر بها تُنشَؤ مصفوفة جدٌدة بحجم أكبر وتُن َ‬
‫المدٌمة ثم تُح َذؾ المدٌمة من خالل الـ ( ‪.GC ) Garbage Collector‬‬

‫أما الـ ‪ LinkedList‬ال ٌكون لها حجم ثابت فكلما أضفت عنصر بها تشٌر إلٌه فمط‬
‫وعندئ ٍذ ٌضاؾ إلى السلسلة مباشرة‪.‬‬

‫ٖٓٔ‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫لنفترض أنه توجد سلسلة بها هذه العناصر ( ‪ ) 1 , 2 , 3 , 4 , 5‬ستكون بهذا الشكل ‪:‬‬
‫‪head‬‬

‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪4‬‬ ‫‪5‬‬

‫‪tail‬‬ ‫‪null‬‬

‫‪ null‬هً كلمة محجوزة فً اللؽة وتعنً ال شًء‪ ،‬أي أنه ال ٌوجد شًء بعد العنصر‬
‫األخٌر فً السلسلة‪.‬‬

‫‪ >--- head‬هو مإشر ٌشٌر إلى أول عنصر فً السلسلة‪.‬‬

‫‪ >--- tail‬هو مإشر ٌشٌر إلى آخر عنصر فً السلسلة‪.‬‬

‫فً حالة أن السلسلة ال ٌوجد بها عناصر فٌكون ‪ٌ head , tail‬إشران على ‪.null‬‬

‫وكما نرى كل عنصر ٌُشٌر إلى العنصر الذي بعده إلى أن نصل إلى آخر عنصر فً‬
‫السلسلة حٌث ٌُشٌر إلى ‪.null‬‬

‫‪ -‬فً حالة اإلضافة فً بداٌة السلسلة إضافة عنصر ( ‪ ) 6‬سٌكون بهذا الشكل ‪:‬‬
‫‪head‬‬

‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪4‬‬ ‫‪5‬‬

‫‪6‬‬ ‫‪tail‬‬
‫‪null‬‬

‫سنجعله ٌُشٌر إلى أول عنصر فً السلسلة وبعد ذلن نجعل الـ ‪ٌ head‬إشر علٌه وبذلن‬
‫ٌرتبط بالسلسلة وٌكون العنصر ‪ 6‬هو أول عنصر فً السلسلة‪.‬‬
‫ٖٔٔ‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫‪ -‬فً حالة اإلضافة فً منتصؾ السلسلة أو فً أي موضع آخر بخالؾ البداٌة والنهاٌة ‪:‬‬

‫أوال نحدد الموضع الذي نرٌد إضافة العنصر فٌه‪.‬‬


‫‪head‬‬

‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪4‬‬ ‫‪5‬‬

‫‪tail‬‬
‫‪6‬‬ ‫‪null‬‬

‫نجعل العنصر الجدٌد ٌُشٌر إلى العنصر التالً للموضع الذي حددناه‪.‬‬
‫‪head‬‬

‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪4‬‬ ‫‪5‬‬

‫‪null‬‬
‫‪6‬‬

‫وآخرا نجعل العنصر الذي ٌسبك الموضع المحدد أن ٌُشٌر إلى العنصر الجدٌد وهكذا‬
‫ٌضاؾ إلى السلسلة‪.‬‬

‫لو جعلنا العنصر الذي ٌسبك المكان المحدد أن ٌُشٌر أوال على العنصر الجدٌد ستمع‬
‫السلسلة من بعد هذا المكان ولن ٌبمى بها سوى العناصر التً تسبك الموضع المحدد‪.‬‬

‫ٕٖٔ‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫‪ -‬فً حالة اإلضافة فً النهاٌة ‪:‬‬


‫‪head‬‬

‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪4‬‬ ‫‪5‬‬

‫‪tail‬‬ ‫‪6‬‬

‫‪null‬‬

‫سنجعل آخر عنصر ٌُشٌر إلٌه ثم نإشر علٌه بـ ‪.tail‬‬

‫‪ -‬فً حالة الحذؾ من البداٌة ( أول عنصر ) ‪:‬‬


‫سنجعل الـ ‪ٌ head‬إشر على العنصر الذي ٌلً أول عنصر وبذلن ٌصبح العنصر‬
‫الجدٌد الذي ٌإشر علٌه الـ ‪ head‬هو أول عنصر فً السلسلة‬
‫‪head‬‬

‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪4‬‬ ‫‪5‬‬

‫‪tail‬‬ ‫‪6‬‬

‫‪null‬‬

‫ٖٖٔ‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫‪ -‬فً حالة الحذؾ من النهاٌة ( آخر عنصر ) ‪:‬‬


‫‪head‬‬

‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪4‬‬ ‫‪5‬‬

‫‪tail‬‬ ‫‪6‬‬

‫‪null‬‬

‫سنجعل العنصر الذي ٌسبك العنصر األخٌر ٌإشر مباشرة على ‪ null‬وبذلن ٌصبح هو‬
‫آخر عنصر فً السلسلة أي الـ ‪.tail‬‬

‫‪ -‬فً حالة الحذؾ من منتصؾ السلسلة أو أي مكان فً السلسلة بخالؾ البداٌة والنهاٌة‪:‬‬

‫أوال نحدد موضع العنصر الذي سنحذفه ثم نجعل العنصر الذي ٌسبمه ٌشٌر إلى العنصر‬
‫الذي ٌلً العنصر الذي سنحذفه‪.‬‬
‫لنفترض أنه توجد سلسلة بها العناصر التالٌة ( ‪) 1 , 2 , 3 , 4 , 5‬‬

‫ونرٌد حذؾ العنصر ‪3‬‬


‫‪head‬‬

‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪4‬‬ ‫‪5‬‬

‫‪tail‬‬ ‫‪null‬‬

‫ٖٗٔ‬
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫مثال ‪:‬‬
‫;‪using System‬‬
‫‪namespace ConsoleApplication5‬‬
‫{‬
‫‪class node‬‬
‫{‬ ‫ٌعبر عن العنصر الذي سٌُضاؾ إلى السلسلة‬ ‫أنشؤنا ‪ّ class‬‬
‫;‪public int data‬‬ ‫وأنشؤنا به ‪ٌ constructor‬ؤخذ البٌانات ك ُمدخَل له وٌضٌفها‬
‫;‪public node next‬‬ ‫فً العنصر وعرفّنا مإشر وٌكون من نفس النوع الذي‬
‫)‪public node(int data‬‬ ‫سٌإشر علٌه وبما أنه سٌإشر على ‪ ( node‬عنصر ) فٌجب‬
‫{‬ ‫أن ٌكون من نفسه نوعه لذا سٌكون نوعه ‪) node ( class‬‬
‫;‪this.data = data‬‬
‫}‬
‫}‬
‫‪class list‬‬
‫{‬ ‫ٌعبر عن السلسلة وسٌكون به الدوال‬ ‫أنشؤنا ‪ّ class‬‬
‫;‪node head, last‬‬ ‫الخاصة بالسلسلة وعرفّنا المإشر ‪ head, last‬وٌكون‬
‫)‪public void insert_at_last(int data‬‬ ‫من نفس النوع الذي سٌإشر علٌه وبما أنه سٌإشر‬
‫{‬ ‫على ‪ ( node‬عنصر ) فٌجب أن ٌكون من نفسه‬
‫;)‪node n = new node (data‬‬ ‫ال‬ ‫نوعه لذا سٌكون نوعه ‪ node‬فالعنصر الواحد‬
‫)‪if (head == null‬‬ ‫ٌوجد به بٌانات فمط بل ٌوجد به أٌضا مإشر ٌإشر‬
‫على العنصر الً ٌلٌه‪.‬‬
‫{‬
‫; ‪head = n‬‬
‫; ‪last = n‬‬
‫أنشؤنا دالة اإلضافة من النهاٌة وتؤخذ البٌانات‪ ،‬فً‬
‫}‬ ‫حالة أن السلسلة ال ٌوجد بها عناصر أي أن الـ ‪head‬‬
‫‪else‬‬ ‫ٌساوي ‪ null‬نستدعً الـ ‪ constructor‬الذي أنشؤناه‬
‫{‬ ‫فً ‪ node class‬ونمرر له البٌانات ونجعل الـ ‪head‬‬
‫; ‪n.next = null‬‬ ‫ٌإشر علٌه‪ ،‬أما إذا كان ٌوجد بها عناصر بالسلسلة‬
‫; ‪last.next = n‬‬ ‫نجعل مإشر الـعنصر الجدٌد ٌإشر على ‪ null‬ثم‬
‫; ‪last = n‬‬ ‫ثم‬ ‫نجعل مإشر الـ ‪ٌ last‬إشر على العنصر الجدٌد‬
‫}‬ ‫نجعل العنصر الجدٌد ‪ last‬أي آخر عنصر فً السلسلة‬
‫}‬

‫ٖ٘ٔ‬
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

public void insert_at_position(int data, int pos)


{
node n = new node(data);
if (pos < 0 || pos > length( ))
Console.WriteLine("\t this position is out of range");
else
{
‫هذه الدالة لإلضافة فً أي موضع فً السلسلة‬
if (pos == 0)
{
n.next = head;
head = n;
}
else
{
node temp = head;
for (int i = 0; i < pos - 1; i++)
{
temp = temp.next;
}
n.next = temp.next;
temp.next = n;
}
}
}
public void insert_at_start(int data)
{
‫هذه الدالة لإلضافة فً بداٌة السلسلة‬
node newhead = new node(data);
newhead.next = head;
head = newhead;
}

ٖٔٙ
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

public void print( )


‫هذه الدالة إلظهار عناصر السلسلة‬
{
node temp = head;
if (is_Empty( ))
Console.WriteLine("\t list is empty");
else
{
Console.Write(" head --> ");
while (temp != null)
{
Console.Write(temp.data + " --> ");
temp = temp.next;
}
Console.Write("null");
}
}
public int length( )
‫هذه الدالة لحساب طول السلسلة أو عدد‬
{ ‫عناصرها‬
node temp = head;
int len = 0;
if (is_Empty( ))
Console.WriteLine("\t list is empty");
else
{
while (temp != null)
{
len++;
temp = temp.next;
}
}
return len;
}

ٖٔ7
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

public bool is_Empty( )


{
‫هذه الدالة للتؤكد من أن السلسلة فارؼة أم ال‬
if (head == null)
return true;
else
return false;
}
public void remove_by_value(int data)
{
if (head == null)
return; ‫هذه الدالة لحذؾ عنصر من خالل ( تحدٌد‬
) ‫لٌمة العنصر‬
if (head.data == data)
{
head = head.next;
return;
}
node current = head;
while (current.next != null)
{
if (current.next.data == data)
{
current.next = current.next.next;
return;
}
current = current.next;
}
}
public void remove_by_index(int index) ‫هذه الدالة لحذؾ عنصر من خالل ( ترلٌمه‬
{ ) ‫فً السلسلة‬
if (index < 0 || index > length( ))
Console.WriteLine("\t this index is out of range");

ٖٔ2
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

else
{
if (index == 0)
head = head.next;
else
{
node temp = head;
for (int i = 0; i < index - 1; i++)
{
temp = temp.next;
}
temp.next = temp.next.next;
}
}
}
public void remove_from_last( )
‫هذه الدالة لحذؾ عنصر من نهاٌة السلسلة‬
{
if (is_Empty( ))
Console.WriteLine(" \t list is empty");
else if (head == last)
{
head = null;
last = null;
}
else
{
node current;
current = head;
node prev = head;
while (current.next != null)
{
prev = current;
current = current.next;

ٖٔ9
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

}
last = prev;
prev.next = null;
}
}
public void remove_from_first( ) ‫هذه الدالة لحذؾ عنصر من بداٌة السلسلة‬
{
if (is_Empty( ))
Console.WriteLine("\t list is empty");
else if (head == last)
{
head = null;
last = null;
}
else
{
head = head.next;
}
}
public void Swap_every_two_node_at_all_node()
{
‫هذه الدالة لتبدٌل كل عنصرٌن مع بعضهما‬
node curr = head; ‫فً السلسلة‬
int temp;
while (curr != null && curr.next != null)
{
temp = curr.data;
curr.data = curr.next.data;
curr.next.data = temp;
curr = curr.next.next;
}
}

ٖٕٓ
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

public void reverse( )


{ ‫هذه الدالة لعكس عناصر السلسلة‬
node var1, var2, var3;
var3 = null;
var1 = head;
while (var1 != null)
{
var2 = var3;
var3 = var1;
var1 = var1.next;
var3.next = var2;
}
head = var3;
}
public void sort_list( )
{ ‫هذه الدالة لترتٌب عناصر السلسلة‬
node curr = head;
int temp;
for (int i = 0; i < length( ) - 1; i++)
{
for (int j = i; j < length( ) - 1; j++)
{
if (curr.data > curr.next.data)
{
temp = curr.data;
curr.data = curr.next.data;
curr.next.data = temp;
}
curr = curr.next;
}
curr = head;
}
}

ٖٕٔ
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

public void get_element_by_position(int pos)


{
‫هذه الدالة إلظهار بٌانات العنصر‬
node temp; ‫من خالل موضعه فً السلسلة‬
temp = head;
if (pos < 0 || pos > length( ))
Console.WriteLine("\t this position is out of range");
else
{
for (int i = 0; i < pos; i++)
temp = temp.next;
Console.WriteLine("\t the element of this position is " + temp.data);
}
}
public void searching(int value)
ً‫هذه الدالة للبحث عن عنصر ف‬
{
‫السلسلة من خالل لٌمته‬
node temp = head;
if (is_Empty( ))
Console.WriteLine("\t list is empty");
else
{
while (temp.data != value && temp.next != null)
temp = temp.next;
if (temp.data == value)
Console.WriteLine("\t" + value + " is exist in the list");
else
Console.WriteLine("\t" + value + " opps! this element is not exist
in the list ");
}
}

ٖٕٕ
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

public void swap_two_nodes(int First_Index, int Second_Index)


{
if (is_Empty( ))
Console.WriteLine("\t list is empty");
if ((First_Index < 0 || First_Index > length()) && (Second_Index < 0
|| Second_Index > length()))
Console.WriteLine("\t One of indexes is out of range or both ");
else
‫هذه الدالة لتبدٌل عنصرٌن فمط فً السلسلة مع‬
{
‫بعضهما‬
node temp1;
node temp2;
temp1 = temp2 = head;
for (int i = 0; i < First_Index - 1; i++)
temp1 = temp1.next;
for (int i = 0; i < Second_Index - 1; i++)
temp2 = temp2.next;
int temp = temp1.data;
temp1.data = temp2.data;
temp2.data = temp;
}
}
public void clear( )
{
‫هذه الدالة لحذؾ كل عناصر‬
head = null; ‫السلسلة‬
last = null;
}

public int max( )


{ ً‫هذه الدالة لترجع أكبر لٌمة ف‬
node temp = head; ‫السلسلة‬
int max = 0;
for (int i = 0; i < length( ); i++)
{

ٖٕٖ
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

if (temp.data > max)


max = temp.data;
temp = temp.next;
}
return max;
}
public int mini( ) ً‫هذه الدالة لتُعٌد ألل لٌمة ف‬
{ ‫السلسلة‬
node temp = head;
int mini;
if (is_Empty())
{
Console.WriteLine(" the list is empty");
mini = 0;
}
else
{
mini = temp.data;
for (int i = 0; i < length(); i++)
{
if (temp.data < mini)
mini = temp.data;
temp = temp.next;
}
}
return mini;
}
}
class Program
{
static void Main( )
{

ٖٕٗ
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

Console.Title = " Linked List";


Console.ForegroundColor = ConsoleColor.DarkGreen;
list li = new list( );
int choice;
int value;
int position;
Console.WriteLine("\t \t \t\t\t\t\t< Welcome > ");
Console.WriteLine("\t \t \t\t\t\t\t -------");
try
{
do
{
Console.WriteLine("Select the operation that you want to do it :");
Console.WriteLine("* 1 + insert element at last \t\t\t
* 6 + Remove element by position ");
Console.WriteLine("* 2 + insert element at first \t\t\t
[ 7 + Remove element by value");
Console.WriteLine("* 3 + insert element at any position\t\t
* 8 + Swap every two elements with each other");
Console.WriteLine("* 4 + Remove element from first \t\t
* 9 + Reverse the list");
Console.WriteLine("* 5 + Remove element from last \t\t\t
* 10 + Print the list");
Console.WriteLine("* 11 ] Get element by position \t\t
* 12 + Get length of the list");
Console.WriteLine("* 13 + search in the list by element\t\t
* 14 + Swap two nodes by index ");
Console.WriteLine(" \t\t* 15 + Clear List \t\t\t\t
* 16 + Maximum value in the list ");
Console.WriteLine(" \t\t* 0 + Press 0 to exit \t\t\t\t
* 17 ] Minimum value in the list");
Console.WriteLine(" \t\t* 18 + Sorting list \t \t \t\t ");

ٖٕ٘
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

Console.Write(" \t\t\t\t\t Your choice is : ");


choice = int.Parse(Console.ReadLine( ));
switch (choice)
{
case 1:
Console.Write("\t enter data of node : ");
value = int.Parse(Console.ReadLine( ));
li.insert_at_last(value);
break;
case 2:
Console.Write("\t enter data of node : ");
value = int.Parse(Console.ReadLine( ));
li.insert_at_start(value);
break;
case 3:
Console.Write("\t enter data of node : ");
value = int.Parse(Console.ReadLine( ));
Console.Write("\t enter position of node : ");
position = int.Parse(Console.ReadLine( ));
li.insert_at_position(value, position);
break;
case 4:
li.remove_from_first( );
break;
case 5:
li.remove_from_last( );
break;
case 6:
Console.Write("\t enter position of node : ");
position = int.Parse(Console.ReadLine( ));
li.remove_by_index(position);
break;
case 7:

ٖٕٙ
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

Console.Write("\t enter value that you want to delete it : ");


value = int.Parse(Console.ReadLine( ));
li.remove_by_value(value);
break;
case 8:
li.Swap_every_two_node_at_all_node( );
break;
case 9:
li.reverse( );
break;
case 10:
li.print( );
Console.WriteLine( );
break;
case 11:
Console.Write("\t enter position of element : ");
position = int.Parse(Console.ReadLine( )); Console.WriteLine();
li.get_element_by_position(position);
break;
case 12:
Console.WriteLine("\t Length of this list = " + li.length( ));
break;
case 13:
Console.Write("\t enter element that you search about it : ");
value = int.Parse(Console.ReadLine( )); Console.WriteLine( );
li.searching(value);
break;
case 14:
int index1, index2;
Console.Write("\t enter first index to swap with another : ");
index1 = int.Parse(Console.ReadLine( ));
Console.Write("\t enter second index to swap with the first:");
index2 = int.Parse(Console.ReadLine( )); Console.WriteLine( );

ٖٕ7
Introduction to C# ‫مقدمح نهثزمجح تانسً شارب‬

li.swap_two_nodes(index1, index2);
break;
case 15:
li.clear( );
break;
case 16:
Console.WriteLine(" the maximum value in the list = " +
li.max( ));
break;
case 17:
Console.WriteLine(" the Minimum value in the list = " +
li.mini( ));
break;
case 18:
li.sort_list( );
break;
case 0:
Console.WriteLine("\t \t\t Thanks for your Time ");
break;
default:
Console.WriteLine(" False choice ");
break;
}
}
while ( choice != 0 );
}
catch ( Exception ex )
{
Console.WriteLine( ex.Message );
}
}
}
}

ٖٕ2
‫‪Introduction to C#‬‬ ‫مقدمح نهثزمجح تانسً شارب‬

‫وآخرا‪...‬‬
‫لدر لً التوفٌك فً كتابة هذا الكتاب وأتمنى أن ٌكون لد نال إعجابكم‬
‫الحمد هلل الذي ّ‬
‫وخرج بشكل ٌُرضً الماريء‪ ،‬ولد كان الكتاب بمثابة رحلة علمٌة ممتعة لإلرتماء‬
‫بموضوع الكتاب لذلن بذلت الكثٌر من الجهد فً إخراجه على المستوى المطلوب‪،‬‬
‫ولكنً ال أستطٌع أن الول أنه كتاب شامل وٌتصؾ بالكمال‪ ،‬ألن كل شًء نالص‬
‫وٌحتاج إلى المزٌد لٌصل إلى مستوى مرتفع من العلم والمعرفة‪.‬‬

‫وإن كان هللا لد وفمنً فً كتابة هذا الكتاب فإنً أعتبر ذلن مكافؤة من هللا تعوٌضا منه‬
‫عما بذلته فٌه من جهد‪ ،‬ولد كان ذلن هدفً منذ البداٌة وأتشرؾ أننً وصلت إلٌه‪.‬‬

‫‪ٖٕ9‬‬

You might also like