كتابة اول برنامج لك بلغة C# وتشغيله.
هيا بنا نبدأ بترجمة وتنفيذ اسهل وابسط برنامج ممكن بلغة C# وهو عبارة عن تطبيق كونسول بسيط يتكون من كلاس يطبع رسالة على الشاشة .
ملاحظة : حتى نبقي الأمور بسيطة لن ندخل حالياً لعالم الفيجوال ستديو 2010, لذلك سنكتب الكودات على أي محرر للنصوص مثل النوتباد ونعمل لها ترجمة بالcompiler ومن ثم نشغلها من سطر الأوامر command-line .
كود البرنامج الأول :
نفتح محرر للنصوص ( مثل Notepad) ونكتب فيه الكود التالي , ثم بعدها نحفظ الملف بامتداد .cs ( على سبيل المثال myFirstprogram.cs)
using System;
namespace Flykit
{
class MyFirstClass
{
public static void Main()
{
Console.WriteLine(“ Hello Flyarb Members.”);
Console.ReadLine();
return;
}
}
}
- سنناقش لاحقاً ميثود Main() في هذه المحاضرة .
ترجمة وتنفيذ الكود :
يمكنك ببساطة ترجمة الكود عبر تشغيل C# command-line compiler بالأمر csc.exe
ثم نكتب الاتي:
csc myFirstprogram.cs
- يجب أن يتوفر لديك ادوات .NET command-line (ومن ضمنها csc) والتي تكون جاهزة اذا كانت environment variables منصبة .
- بمعنى اخر عندما تنصب .NET والفيجوال ستديو 2010 بالشكل الصحيح سيتم تنصيب تلك الأدوات على جهازك .
ملاحظة : اذا كنت لا تملك environment variables منصبة على جهازك فلديك خيارين :
الخيار الأول : أن تشغل ملف الباتش من سطر الاوامر cmd :
%Microsoft Visual Studio 2010%\Common7\Tools\vsvars32.bat
حيث %Microsoft Visual Studio 2010% هو المجلد المنصب فيه الفيجوال ستديو 2010 .
الخيار الثاني وهو الأسهل : أن تستعمل Visual Studio 2010 command prompt بدلا من استعمال نافذة command prompt الاعتيادية .
سوف تجدها في المسار التالي:
Start menu – Programs – Microsoft Visual Studio 2010 – Visual Studio Tools - Visual Studio 2010 command prompt
هذه الأداة هي ببساطة نافذة command prompt تشغل vsvars32.bat بشكل تلقائي عندما تفتحها.
بعد أن قمنا بترجمة الكود تم انشاء ملف تنفيذي باسم myFirstprogram.exe ويمكنك تشغيله بواسطة نفس نافذة الcommand line أو ب Windows Explorer مثل أي ملف تنفيذي اخر .
جرب وانظر كيف يظهر ناتج البرنامج :
csc myFirstprogram.cs
Microsoft ® Visual C# 2010 Compiler version 4.0.20506.1
Copyright © Microsoft Corporation. All rights reserved.
myFirstprogram.exe
Hello Flyarb Members.
الصور التالية توضح عملية كتابة الكود وترجمته وتشغيله عن طريق الخيار الثاني الذي تم شرحه :
شرح الكود :
قبل أن نشرح الكود السابق سنتكلم عن بعض الملاحظات الهامة في تركيب C# :
- اغلب الجمل في C# تنتهي بفاصلة منقوطة (;) (كما في لغات C الاخرى( ويمكنك كتابة عدة اسطر لامر معين دون الحاجة لاداة وصل .
- الجمل البرمجية في C# تجمع داخل كتل blocks باستعمال الأقواس المجعدة ({}) .
- الملاحظات السطرية تبدأ ب (//) اما الملاحظات لعدة اسطر تبدأ ب(/*) وتنتهي بها معكوسة (*/) .
- تشبه C# بهذه الأمور لغات C++ و Java لكنها تختلف مع visual basic , فالفاصلة المنقوطة (;) والأقواس المجعدة ({}) تعطي كودات C# منظر مختلف عن كودات visual basic. فإذا كانت خلفيتك البرمجة هي فيجوال بيسك بالدرجة الأولى فعليك ان تحرص بشكل كبير على أن تنهي كل سطر في C# بفاصلة منقوطة , وفي حال اهملتها فإنها عادة تسبب اكبر نسبة لاخطاء المبرمجين الجدد على لغات عائلة C .
- شيئ اخر عليك تذكره وهو أن لغة C# حساسة للاحرف وهذا يعني أن المتغيرات التي اسمها Test و test هي متغيرات مختلفة .
نعود الان لشرح الكود السابق , الأسطر الاولى من الكود تتعامل مع ال namespaces ( سنذكرها لاحقا في هذه المحاضرة) . حيث انها عبارة عن طريقة لتجميع الclasses المترابطة معاً. ففي تلك الأسطر تصرح الكلمة المحجوزة namespace عن الnamespace الذي يجب أن يرتبط بها الclass , وتعتبر كل الأكواد الواقعة بين اقواس الnamespace تابعة لها .
في الأسطر الأولى تحدد جملة using الnamespace التي يجب على المترجم أن يراها لكي يبحث عن أي classes استخدمتها داخل كودك ولا يوجد لها تعريف داخل نفس الnamespace الحالية. وهذا الأمر يقدم نفس الهدف الذي تعمله جملة import في الجافا وجملة using namespace في C++ .
using System;
namespace Flykit
{
سبب وجود جملة using في المثال هو لأنك استخدمت في كودك library class وهي System.Console. فجملة using تسمح لك بأن تؤشر ببساطة على هذا الكلاس ب Console ( وبشكل مشابه اي كلاس اخر في System namespace). ولو أننا لم نستعمل using فيجب علينا وضع الإستدعاء الكامل من اجل استخدام الميثود Console.WriteLine كالاتي:
System.Console.WriteLine(“ Hello Flyarb Members.”);
الnamespace القياسية System هي الأكثر استخداماً في انواع .NET بشكل عام ومستقر . يجب أن ندرك جميعاً أن كل شيئ نعمله في C# يعتمد على .NET base classes , ففي المثال استعملنا Console class ضمن System namespace لكي نكتب ونطبع على نافذة الكونسول .
لا تمتلك C# أي كلمات محجوزة داخلية البناء تستعمل للمدخلات والمخرجات input & output فهي تعتمد بشكل كامل على .NET classes .
ملاحظة : لأن كل برامج C# على الأغلب تستعمل System namespace سوف نفترض أن جملة using System في كل كودات هذه المحاضرة .
بعد ذلك تم عمل تعريف للكلاس باسم MyFirstClass . وبما انه وضع داخل namespace تدعى Flykit فإن الإسم الكامل للكلاس سيكون : Flykit.MyFirstClass
class MyFirstClass
{
يجب أن تكون كل كودات C# ضمن class .
تعريف الكلاس يتكون من الكلمة المحجوزة class تتبع باسم الكلاس وزوج من الأقواس المجعدة . كل الكودات المرتبطة بالكلاس يجب أن توضع بين تلك الأقواس.
بعدها تم تعريف ميثود تدعى Main() حيث أن كل المشاريع القابلة للتنفيذ في C# ( مثل تطبيقات الكونسول وتطبيقات الويندوز و Windows services) يجب أن تحتوي على نقطة دخول وهي ميثود Main() ( حرف M كبير(
public static void Main()
{
تستدعى هذه الميثود عندما يتم تشغيل البرنامج . ويجب أن ترجع اما لا شيئ void أو (int) .
يجب أن تعلم أن هيكل تعريف الميثود في C# هو كالاتي:
[modifires] return-type Methodname ([Parameters])
{
// جسم الميثود- pseudo-codeهذا كود
}
الاقواس المربعة الاولى [modifires] تمثل كلمات محجوزة اختيارية مخصصة وتستعمل لتحديد ميزات وخواص معينة للميثود التي تعرفها وتبنيها . فمثلاً تحدد مكان الوصول للميثود ففي هذه الحالة يوجد اثنين من Modifires : public و static . public modifier تعني أنه يمكن الوصول للميثود من أي مكان , لذلك يمكنك استدعائها من مكان ما خارج الكلاس . اما static modifier تعني أن الميثود لا تعمل على instance محدد من الكلاس وبالتالي يمكن استدعائها بدون أن نعمل كائن مماثل للكلاس باستخدام الكلمة المحجوزة new . وهذا مهم لأنك تنشأ مشروع قابل للتنفيذ وليس class library .
في البرنامج الأول وضعنا return-type من نوع void ولم نضع أي باراميتر .
الان نأتي لجمل الكودات نفسها:
Console.WriteLine(“ Hello Flyarb Members.”);
Console.ReadLine();
return;
نحن هنا ببساطة استدعينا الميثود WriteLine() للكلاس System.Console لكي نكتب سطر على شاشة الكونسول . WriteLine() هي static method لذلك نحن لسنا بحاجة لعمل instantiate لكائن كونسول قبل استدعائها.
Console.ReadLine() تقرأ مدخلات المستخدم ونحن اضفنا هذا السطر لنجبر التطبيق على انتظر الضغط على return key زر الإنتر من لوحة المفاتيح قبل اغلاق التطبيق .. ولذلك سنستطيع مشاهدة شاشكة الكونسول للفيجوال ستديو 2010 , وفي حال لم نضعها سيتم تنفيذ الكود والخروج منه بسرعة لذلك لن نشاهد شيئ .
بعدها قمنا باستدعاء return للخروج من هذه الميثود ( ولانها ميثود Main() ... ستخرج من البرنامج ايضا بطبيعة الحال ) ولأننا وضعنا القيمة المرجعة للميثود من نوع void لذلك لن ترجع الميثود أي قيمة .
لحد الان انت اخذت مذاق جيد لاساسيات كتابة C# وسنبدأ بخوض التفاصيل معاً في القسم التالي : المتغيرات في C# .
المصدر
