تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
الطريقة Main
#1
كاتب الموضوع : samerselo

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

كود :
Module Module1
Sub Main()
End Sub
End Module
وفي الواقع فإن الـ Module هي عبارة عن فئة Class مع بعض الاختلافات الواضحة فأي إجراء أو وظيفة عامة Public يتم تعريفها ضمن الـ Module تكون عنصر مشترك Shared Member يمكن الوصول إليه مباشرة من جميع أنحاء التطبيق وبذلك فأنت لست مضطرا لكتابة اسم الـ Module عندما تريد استخدام عناصرها


كود :
Module Module1
Sub Main()
' Show banner.
DisplayBanner()
' Get user's name and say howdy.
GreetUser()
End Sub

Sub DisplayBanner()
' Get the current color of the console text.
Dim currColor As ConsoleColor = Console.ForegroundColor
' Set text color to yellow.
Console.ForegroundColor = ConsoleColor.Yellow
Console.WriteLine("******* Welcome to FunWithModules *******")
Console.WriteLine("This simple program illustrates the role")
Console.WriteLine("of the Module type.")
Console.WriteLine("*****************************************")
' Reset to previous color of your console text.
Console.ForegroundColor = currColor
Console.WriteLine()
End Sub

Sub GreetUser()
Dim userName As String
Console.Write("Please enter your name: ")
userName = Console.ReadLine()
Console.WriteLine("Hello there {0}. Nice to meet ya.", userName)
End Sub
End Module
لاحظ في المثال السابق أن الطريقة Main يمكنها استدعاء الطريقة GreetUser لأنها معرفة ضمن نفس الـ Module ولست مضطرا لكتابة اسم الـ Module كبادئة عند استدعاء عنصر فيها. وفي التطبيق الذي يحتوي على أكثر من Module أنت لست مضطرا لكتابة اسم أي Module كبادئة عند استدعاء العناصر المحتواة في تلك الـ Modules إلا إذا كانت هناك عدة طرائق في أكثر من Module تحمل نفس الاسم.
كما أن الـ Module لا يمكن أن يتم استخدامها كنوع عند التصريح عن متغير باستخدام الكلمة المحجوزة New لأنها غير قابلة للإنشاء Non Creatable وإن استخدمت كودا شبيها بالكود التالي فإن المترجم سيعطيك خطأ


كود :
' Nope! Error, can't allocated modules!
Dim m as New Module1()
كما يمكن للـ Module أن تحتوي على عناصر أخرى إضافة للوظائف والإجراءات كحقول البيانات مثلا كما في المثال

كود :
Module MyModule
Public UserName As String

Sub GreetUser()
Console.WriteLine("Hello, {0}.", UserName)
End Sub

End Module
وكأي عنصر آخر ضمن Module يمكننا استخدام الحقل UserName مباشرة

كود :
Sub Main()
...
' Set user's name and call second form of GreetUser().
UserName = "Fred"
MyModule.GreetUser()
...
End Sub
الطريقة Main
أي تطبيق Vb2008 يجب أن يحتوي على نوع يحدد الطريقة Main التي تشكل نقطة الدخول للتطبيق وهي تكون موجودة عادة ضمن Module وهي طريقة مشتركة دوما Shared method مع انه يمكن أن تتواجد ضمن فئة Class عندها يجب عليك التصريح عنها باستخدام الكلمة المحجوزة Shared. وكمثال على ذلك أنشئ تطبيق كونسول جديد واستبدل كامل الكود المولد بالكود التالي

كود :
Class Program

' Unlike Modules, members in a class are not
' automatically shared. Thus, we must declare Main()
' with the Shared keyword.
Shared Sub Main()

End Sub

End Class
فإن حاولت تشغيل البرنامج عند هذه النقطة فسوف تتلقى خطأ بأنه لا يمكن إيجاد الطريقة Main ولحل هذه المشكلة يجب عليك تحديد الفئة Program كعنصر بدء للتطبيق وذلك في Startup Object من الصفحة Application في خصائص MyProject

معالجة محددات سطر الأوامر
إحدى المهام الرئيسية للطريقة Main هي معالجة محددات سطر الأوامر التي يتم تمريرها للتطبيق فمثلا مترجم سطر الأوامر vbc.exe يمتلك العديد من الخيارات مثل target و out وغيرها فعندما تريد إنشاء طريقة Main تقوم بمعالجة محددات سطر الأوامر الممررة للتطبيق ستجد أنه لديك عدة طرق للقيام بذلك.
أول طريقة يمكننا استخدامها لهذا الغرض هو استخدام الطريقة GetCommandLineArgs المعرفة ضمن المجال System.Envitronment التي تعيد مصفوفة من العناصر من النوع String وأول عنصر في هذه المصفوفة هو اسم الملف التنفيذي للتطبيق بينما تشكل باقي عناصر المصفوفة محددات سطر الأوامر الممررة للتطبيق

كود :
Class Program

Shared Sub Main()
Console.WriteLine("***** Fun with Main() *****")
' Get command-line args.
Dim args As String() = Environment.GetCommandLineArgs()
Dim s As String

For Each s In args
Console.WriteLine("Arg: {0}", s)
Next
End Sub

End Class
وإن لم ترغب باستخدام الطريقة السابقة يمكنك تحديد مصفوفة String كدخل للطريقة Main كما في الكود


كود :
Shared Sub Main(ByVal args As String())
Console.WriteLine("***** Fun with Main() *****")
' Get command-line args.
Dim s As String
For Each s In args
Console.WriteLine("Arg: {0}", s)
Next
End Sub
استخدام Main كوظيفة وليست إجراء
يمكننا أيضا تعريف Main كوظيفة تعيد قيمة من النوع Integer الأمر الذي يعد من الموروثات من لغة C حيث يعيد البرنامج القيمة 0 عند انتهائه بصورة طبيعية أو يمكن إعادة أي قيمة أخرى تمثل خرجا ما أو رقما للخطأ الذي أدى إلى انتهاء البرنامج كما في الكود

كود :
Shared Function Main(ByVal args As String()) As Integer
Console.WriteLine("***** Fun with Main() *****")
Dim s As String
For Each s In args
Console.WriteLine("Arg: {0}", s)
Next
' Return a value to the OS.
Return 0
End Function
وبغض النظر عن الطريقة التي نقوم فيها بتعريف Main كإجراء أو وظيفة يبقى الهدف الأساسي منها هو التعامل مع الأنواع التي تشكل وظيفية البرنامج وتذكر دوما أنه عند إنتهاء Main أو الخروج منها فإن البرنامج سيتم إنهاؤه حتما بالنتيجة

تمرير محددات سطر الأوامر من داخل بيئة التطوير
يمكننا فيجول ستوديو من تمرير محددات سطر الأوامر للتطبيق عند اختباره من داخل بيئة التطوير الأمر الذي يسهل علينا عملية الاختبار لما يوفر علينا من عناء تمرير تلك المحددات يدويا حيث يمكننا تمريرها أثناء الاختبار بإدخالها في مربع Command Line Arguments في الصفحة Debug من خصائص MyProject
الرد }}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  [مقال] الطريقة الصحيحة لحساب متوسط تكلفة الوحدة محمود بكرى 2 2,332 20-03-18, 08:28 PM
آخر رد: youcef3zino
  بديل Sub Main RaggiTech 0 1,611 03-10-12, 01:34 AM
آخر رد: RaggiTech

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم