التعمق في لغة C# (المقالة الأولى)

أكتوبر 15, 2008 الساعة 3:17 ص | أرسلت فى عام | 6 تعليقات
الأوسمة: , ,

لا بد أنك عزيزي المبرمج قد قمت بكتابة من الأوامر والتعليمات وأنشأت العديد من البرامج من نوع Console Application وخاصة في بداية تعلمك للغة C#، فهذا يعني أنك قد صادفت وبدون شك التابع Main،،
حديثي سيكون بداية عن التابع Main، دعني بداية أطرح عليك السؤال التالي:

ما هو التابع Main؟؟
الجواب وبكل بساطة هو أن هذا التابع يعتبر نقطة الانطلاق لأي برنامج، فأنت إنطلاقا من كونك مبرمج، وهذا شيء أكيد يجب أن تضع نصب عينيك أن أول تابع سوف يتم تنفيذه أو البدء بتنفيذه لن يكون سوى التابع Main، وبالتالي أنت ملزم ببناءه إن كنت لا تملك نسخة من Visual Studio، إذ أن بيئة Visual Studio ستقوم نيابة عنك ببنائه.

هل للتابع Main شكل محدد؟
لا ليس له شكل محدد، يمكنك بناؤه بعدة أشكال، ولكن ضمن بعض القواعد التالية:

  • يجب أن يكون التابع ستاتيكي static.
  • يجب أن يكون نوع القيمة المرجعة للتابع void أو int.
  • يجب أن يكون اسم التابع حصريا Main فلا يمكن أن يكون main أو MaiN أو MAIN.
  • يمكن أن يكون للتابع برامتر أو لا يكون.
  • ليس من الضروري أن يكون التابع public.

لاحظ بعض من أشكاله:

 

static void Main(string[] args)
{
}

static int Main(string[] args)
{
}

static void Main()
{
}

 

لابد وأن الشكل الثاني بالنسبة للقيمة المرجعة int من الأشكال الغير مألوفة لديك، إلا إذا كنت من مبرمجي لغة C, دعني أشرح لك القضية لا بد أنك سريع البديهة ولاحظت أنه في هذه الحالة يتوجب عليك إرجاع قيمة باستخدام تعليمة return، إن الغاية من هذه القيمة المرجعة هي معرفة الحالة التي انتها بها البرانامج، أي أن البرنامج إذا أرجع قيمة 0 فهذا يعني أن البرنامج قد انهى التنفيذ بنجاح ما عدا ذلك تنعني أنه قد حصل خطأ ما أثناء تنفيذ البرنامج، والان قد يتبادر إلى ذهنك ما هي الفائدة من هذه القيمة المرجعة؟

إن نظام التشغيل يلتقط هذه القيمة ويضعها في متحول اسمه %ERRORLEVEL%، وبالتالي إذا كنت قد أنشأت برنامج يقوم بتشغيل برنامج آخر، فإنك قد تحتاج لمعرفة الحالة التي أنهى بها البرنامج عمله!!
وبالتالي حتى تستطيع الوصول إلى القيمة التي أعادها البرنامج فهناك طريقتين:
الأولى،، عن طريق المتحول %ERRORLEVEL%
الثانية،، عن طريق الخاصة System.Diagnostics.Proccess.ExitCode

 دعنا نوضح الكلام السابق عن طريق مثال بسيط يعتمد على الطريقة الأولى:
  1. قم بإنشاء مشروع من نوع Console Application
  2. ضمن التابع Main قم بكتابة الكود التالي:

 

static int Main(string[] args)
{
   // Display a message and wait for Enter key to be pressed
   Console.WriteLine(“***** My First C# App *****”);
   Console.WriteLine(“Hello World!”);
   Console.WriteLine();
   // Return an arbitrary error code.
   return -1;
} 

 

  1.  إذهب إلى مجلد Debug الموجود داخل مجلد bin، وقم بإنشاء ملف باسم Test.bat، وباسخدام برنامج Notepad قم بكتابة الكود التالي:
 
@echo off
rem A batch file for SimpleCSharpApp.exe
rem which captures the app’s return value.
UsingErrorLevel.exe
@if %ERRORLEVEL% == “0″ goto success
:fail
    echo This application has failed!
    echo return value = %ERRORLEVEL%
    goto end
:success
    echo This application has succeeded!
    echo return value = %ERRORLEVEL%
    goto end
:end
    echo All Done.
 
4. ثم قم بتشغيل الملف Test.bat ولاحظ النتائج:
 
Core C Sharp Struct

Core C Sharp Struct

 
ملاحظة: إن القيمة المرجعة الافتراضية للتابع Main هي void، في هذه الحالة ستكون قيمة المتحول هي 0 في حال أنه لم يحدث أي خطأ في البرنامج، وكأن برنامجك قد أعاد القيمة 0 أي “return 0″
 
 
معالجة القيم الممررة إلى المتحول args:
 
أعتذر عزيزي المبرمج إن كان عنوان الفقرة غير مناسب، دعني بكلمات أخرى أشرح لك الأمر،، إن التابع Main له برامتر واحد إن وجد ألا وهو args من نوع string[]،، ماهي الفائدة منها، إن الفائدة من هذا البرامتر هو تمرير بعض القيم للبرنامج أثناء تشغيله، لا تقلق أبدا إن كنت لم تفهم ما عنيته إلى الآن فالأسطر القادمة ستكون كيفلة بإيضاح الفكرة إن شاء الله، فأنا أعلم ضعفي في اللغة العربية،
الان دعنا نقوم ببناء حلقة foreach تقوم بطباعة محتوى البرامتر args، على النحو التالي:
static void Main(string[] args)
{
  foreach (string s in args)
  { Console.WriteLine(s); }
}
والآن قم بتشغيل البرنامج لتلاحظ لا شيء في نافذة Console Window، والسبب في ذلك أن المصفوفة args لا تحتوي على أية عنصر!!
والان ربما سيتبادر إلى ذهنك أنه كيف لي أن أمرر قيم إلى البرنامج؟
إن الإجابة عن السؤال غاية في البساطة، قم بتشغيل نافذة محرر الأوامر Command Line، الخاصة بالـ Visual Studio أو الخاصة بنظام التشغيل Windows، وبعد أن تحدد المسار الموجود عليه الملف التنفيذي للبرنامج السابق، قم بكتابة التالي:
 
Test.exe C#.NET C++.NET VB.NET
 
لتظر لك النتائج التالية لاحظ الشكل التالي:
 
Core C Sharp Struct

Core C Sharp Struct

 
طبعا Test.exe هو اسم البرنامج،، لابد أنك لا حظت أني فصلت بين القيم السابقة بفراغ، هذه أحد الطرق ولاكن أنت لست مضرا إلى إختبار برنامجك كل مرة بإستخدام نافذة محرر الأوامر Command-Line فبيئة Visual Studio كعادتها تؤمن للمبرمج طرق سهله للتحقيق ما يصبوا إليه، فتابع معي هذه الطريقة إن كنت لم تيئس بعد من قراءة كلامي المفشكل!!
 
  1. من نافذة Solution Explorer حدد على مشروعك ثم إضغط عليه بزر الفأرة الأيمن لتظهر قائمة منسدلة إختر منها Properties، لتظهر لك النافذة التالية: 
    Core C Sharp Struct

    Core C Sharp Struct

     

  2. ثم إختر التبويب Debug، لاحظ الشكل التالي: 
    Core C Sharp Struct

    Core C Sharp Struct

     

  3. لاحظ الخيار Command line arguments، من خلال مربع النص هذا يمكنك كتابة القيم التي تود تمريرها إلى برنامجك، فمثلا جرب المثال السابق بكتابة C#.NET C++.NET VB.NET، ثم قم بتشغيل البرنامج مرة أخرى لتلاحظ ذات النتائج.
بعض المزايا الموجودة في الصف System.Enviroment:
 
يحتوي هذا الصف على العديد من الخصائص والتوابع المفيدة أذكر منها:
  • التابع: GetCommandLineArgs()
    وظيفة هذا التابع هو القيم التي مررت للبرنامج أثناء تشغيله، وبالتالي هذا يغنيك عن البرامتر args الموجود ضمن التابع Main.
  • الخاصية: ExitCode
    هذه الخاصة تماثل عمل المتحول %ERRORLEVEL% الذي سبق وتحدثنا عنه.
  • الخاصية: MachineName
    هذه الخاصية تعطيك اسم الحاسب.
  • الخاصية: SystemDirectory
    هذه الخاصية تقدم لك مسار مجلد نظام التشغيل لديك كاملاً.

About these ads

6 تعليقات »

خلاصة "RSS" للتعليقات على هذه المقالة. TrackBack URI

  1. جميل ورائع……..شكرا

  2. عفوا،،

  3. شكرا جزيلا اخي الكريم، ولكن ما فائدة كتابة هذه args وماذا تفعل؟. ارجو توضيحها مع الشكر

  4. هذا البرامتر args مفيد ان كنت تريد تمرير بعض القيم عند تشغيل البرنامج، ليقوم البرنامج بعمل ما بناءً على هذه القيم. مثال بسيط على ذلك: هل اشتغلت سابقا على أوامر منصة DOS أو Command Line) Cmd) هناك العديد من الأوامر، إن لم تكن كلها، تأخذ قيم يتم تمريرها عن الاستدعاء للأمر، ليقوم البرنامج بالاستجابة التي تناسب الامر الذي أعطيته اياه، edit c:\test.txt. مثال آخر، هل قمت سابقا بترجمة كود سي شارب من خلال نافذة الاوامر Command، ان كنت قمت بذلك فلا بد استخدمت الامر csc.exe فعند استخدامك اياه فإنك تقوم بتمرير بعض القيم، مثل مسار ملف الكود للسي شارب الذي تود أن بترجمته وتحويله إلى ملف تنفيذي أو إلى مكتبة dll

    مثال آخر، عندما تقوم بفتح ملف نصي text فإن نظام التشغيل ويندوز يقوم باستدعاء البرنامج notepad.exe ويقوم بتمرير مسار الملف النصي الذي قمت بالنقر عليه ليقوم برنامج Notepad بشكل مباشر بفتح الملف المطلوب

    أرجوا أن يكون توضح الامر
    إن كان هناك سؤالا آخر، فلا تتردد

  5. مثال آخر جميل، قم بفتح نافذة Run “تشغيل” واكتب الامر التالي:
    notepad.exe c:\myfile.txt
    لاحظ إذا أنك اذعنت للنظام بتشغيل برنامج محرر النصوص المشهور Notepad وقمت بتمرير الملف الذي ترغب من محرر النصوص بفتحه.

    هل لاحظت أهمتة برامتر args؟؟

    أي استفسار آخر لا تتردد بطرحة، يمكننا الاستفادة من كافة الاسئلة ان شاء الله

  6. رااااااااااااااااااااااااااااااااااااااااااااائع جداا
    شكرا جزيلا


أضف تعليق

إملأ الحقول أدناه بالمعلومات المناسبة أو إضغط على إحدى الأيقونات لتسجيل الدخول:

WordPress.com Logo

You are commenting using your WordPress.com account. تسجيل الخروج / تغيير )

Twitter picture

You are commenting using your Twitter account. تسجيل الخروج / تغيير )

Facebook photo

You are commenting using your Facebook account. تسجيل الخروج / تغيير )

Google+ photo

You are commenting using your Google+ account. تسجيل الخروج / تغيير )

Connecting to %s

المدونة لدى وردبرس.كوم. | The Pool Theme.
المدخلات و تعليقات feeds.

Follow

Get every new post delivered to your Inbox.

%d bloggers like this: