منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب
الدرس السادس -تابع المتغيرات ( امكانية الوصول) - نسخة قابلة للطباعة

+- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb)
+-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182)
+--- قسم : قسم مقالات VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=184)
+--- الموضوع : الدرس السادس -تابع المتغيرات ( امكانية الوصول) (/showthread.php?tid=4883)



الدرس السادس -تابع المتغيرات ( امكانية الوصول) - RaggiTech - 02-10-12

كاتب الموضوع : المخلب الجارح

امكانية الوصول :

Public:

نستطيع استعمال هذة الكلمة المحجوزة داخل module , class ,structure , namespace ولا نستخدمها داخل الاجرائات الفرعية وتتضمن المتغيرات
التى نريد الوصول المباشر اليها من داخل او خارج الكتلة البرمجية

Protected:

نسطيع استخدام هذة الكلمة المحجوزة في مستوى ال Class فقط
ولا نستخدمها بداخل module او داخل الاجرائات الفرعية ضمن ال Class
وتتضمن المتغيرات التى تكون امكانية الوصول اليها من داخل ال Class
او من خلال الكلاس المشتق drived class

Friend:

نستطيع استعمال هذة الكلمة المحجوزة داخل module, class ,structure , namespace ولا نستخدمها داخل الاجرائات الفرعية
وتتضمن المتغيرات التى نريد الوصول المباشر اليها من داخل
او خارج الكتلة البرمجية ولكن ظمن نفس المشروع
وهذا هو الاختلاف الاساسي بين Public و Friend فالاول يمكن الوصول الية
من داخل مشروع اخر اما الثاني فيمكن الوصول الية فقط ضمن نفس المشروع

Protected Friend:

نسطيع استخدام هذا النوع من الاعلان في مستوى ال Class فقط ولا نستخدمها
بداخل module او داخل الاجرائات الفرعية ضمن ال Class هذة الكلمة المحجوزة
هي اتحاد كل من الكلمتين المحجوزتين وتستخدم لامكانية الوصول مع الكود ضمن
نفس ال Class او من خلال الكلاس المشتق drived class وذلك ضمن نفس المشروع

Private:

تستخدم هذة الكلمة المحجوزة للاعلان عن المتغيرات داخل module, class,structure فقط ولا تستخدم داخل الاجرائات الفرعية
وتستخدم للاعلان عن المتغيرات المستخدمة ضمن
نفس module او class او structure

Static:

يمكنك استخدام هذة الكلمة المحجوزة مع المتغيرات بداخل الاجرائات الفرعية او الكتل البرمجية بداخل تلك الاجرائات
مثل جملة For او جملة Try..Catch والمتغير من هذا النوع يمكنة الاحتفاظ بقيمتة وعدم تدميرها قيمتة الى نهاية البرنامج



: Shared

نستطيع استعمال هذة الكلمة المحجوزة داخل
module, class,structure, namespace ولا نستخدمها داخل الاجرائات الفرعية
وهذة الكلمة المحجوزة تعني ان كل النسخ من class او structure
سوف تتشارك نفس المتغيرات التى تم الاعلان بانها Shared
مثلا لو قمنا بالاعلان عن متغير من هذا النوع بداخل كلاس ثم قمنا
بانشاء 3 نسخ من هذا الكلاس و قمنا بتغيير
قيمتة ذلك المتغير بواسطة احد النسخ الثلاث فان باقي النسخ
سوف تتشارك تلك القيمة الجديدة.


Shadows

ستخدم هذة الكلمة المحجوزة للاعلان عن المتغيرات داخل module, class , structure فقط ولا تستخدم داخل الاجرائات الفرعية
وتستخدم لكي تقوم باخفاء المتغير عن المتغير الذي يساوية
بالاسم بالكلاس الاساسي أي الموروث منة
أي يمكن باستخدام هذة الكلمة الاعلان عن متغير بنفس اسم
متغير بالكلاس الاب او الجد وهكذا
وهذا المثال يوضح ذلك


كود :
[color=#000000][COLOR=#0000bb][/color][color=#007700]Public Class [/color][COLOR=#0000bb]Person
[/COLOR][color=#007700]Public [/color][color=#0000bb]LastName [/color][color=#007700]As [/color][COLOR=#0000bb]String
[/COLOR][color=#007700]Public [/color][color=#0000bb]EmployeeId [/color][color=#007700]As [/color][COLOR=#0000bb]String
End [/COLOR][COLOR=#007700]Class

Public Class [/COLOR][COLOR=#0000bb]Employee
Inherits Person
[/COLOR][color=#007700]Public [/color][color=#0000bb]Shadows EmployeeId [/color][color=#007700]As [/color][COLOR=#0000bb]Long
End [/COLOR][COLOR=#007700]Class

Public Class [/COLOR][COLOR=#0000bb]Manager
Inherits Employee
[/COLOR][color=#007700]Public [/color][color=#0000bb]Shadows LastName [/color][color=#007700]As [/color][COLOR=#0000bb]String
End [/COLOR][COLOR=#007700]Class

Private [/COLOR][color=#0000bb]Sub TestShadows[/color][COLOR=#007700]()
[/COLOR][color=#0000bb]Dim mgr [/color][color=#007700]As New [/color][COLOR=#0000bb]Manager
mgr[/COLOR][color=#007700].[/color][color=#0000bb]LastName [/color][color=#007700]= [/color][COLOR=#0000bb]“Manager Last Name”
mgr[/COLOR][color=#007700].[/color][color=#0000bb]EmployeeId [/color][color=#007700]= [/color][COLOR=#0000bb]1
Dim emp [/COLOR][color=#007700]As [/color][color=#0000bb]Employee [/color][color=#007700]= [/color][color=#0000bb]CType[/color][color=#007700]([/color][color=#0000bb]mgr[/color][color=#007700], [/color][color=#0000bb]Employee[/color][COLOR=#007700])
[/COLOR][color=#0000bb]emp[/color][color=#007700].[/color][color=#0000bb]LastName [/color][color=#007700]= [/color][COLOR=#0000bb]“Employee Last Name”
emp[/COLOR][color=#007700].[/color][color=#0000bb]EmployeeId [/color][color=#007700]= [/color][COLOR=#0000bb]2
Dim per [/COLOR][color=#007700]As [/color][color=#0000bb]Person[/color][color=#007700]= [/color][color=#0000bb]CType[/color][color=#007700]([/color][color=#0000bb]mgr[/color][color=#007700], [/color][color=#0000bb]Person[/color][COLOR=#007700])
[/COLOR][color=#0000bb]per[/color][color=#007700].[/color][color=#0000bb]LastName [/color][color=#007700]= [/color][COLOR=#0000bb]“Person Last Name”
per[/COLOR][color=#007700].[/color][color=#0000bb]EmployeeId [/color][color=#007700]= [/color][COLOR=#0000bb]“A”
MessageBox[/COLOR][color=#007700]([/color][color=#0000bb]mgr[/color][color=#007700].[/color][color=#0000bb]EmployeeId [/color][color=#007700]& [/color][color=#0000bb]“[/color][color=#007700]: [/color][color=#0000bb]“ [/color][color=#007700]& [/color][color=#0000bb]mgr[/color][color=#007700].[/color][color=#0000bb]LastName[/color][COLOR=#007700])
[/COLOR][color=#0000bb]MessageBox [/color][color=#007700]([/color][color=#0000bb]emp[/color][color=#007700].[/color][color=#0000bb]EmployeeId [/color][color=#007700]& [/color][color=#0000bb]“[/color][color=#007700]: [/color][color=#0000bb]“ [/color][color=#007700]& [/color][color=#0000bb]emp[/color][color=#007700].[/color][color=#0000bb]LastName[/color][COLOR=#007700])
[/COLOR][color=#0000bb]MessageBox [/color][color=#007700]([/color][color=#0000bb]per[/color][color=#007700].[/color][color=#0000bb]EmployeeId [/color][color=#007700]& [/color][color=#0000bb]“[/color][color=#007700]: [/color][color=#0000bb]“ [/color][color=#007700]& [/color][color=#0000bb]per[/color][color=#007700].[/color][color=#0000bb]LastName[/color][COLOR=#007700])
[/COLOR][COLOR=#0000bb]End Sub  
[/COLOR][/COLOR]



ReadOnly

نستطيع استعمال هذة الكلمة المحجوزة داخل module, class , structure , namespace ولا نستخدمها داخل الاجرائات الفرعية
ومن معنى هذة الكلمة نفهم عملها فهي تقوم بالاعلان
عن متغيرات للقرائة فقط ولا يمكن تعديلها وهي مفيدة جدا ومثال عن
كيفية الاعلان باستخدامها

كود :
[color=#000000][COLOR=#0000bb][/color][color=#007700]Public [/color][color=#0000bb]ReadOnly MaxEmployees [/color][color=#007700]As [/color][color=#0000bb]Integer [/color][color=#007700]= [/color][COLOR=#0000bb]100  
[/COLOR][/COLOR]

كما اننا نستطيع ان نعطي قيم لمتغيرات من هذا النوع عن عمل
نسخة من كلاس وذلك داخل دالة البناء مثال


كود :
[color=#000000][COLOR=#0000bb][/color][color=#007700]Public Class [/color][COLOR=#0000bb]EmployeeCollection
[/COLOR][color=#007700]Public [/color][color=#0000bb]ReadOnly MaxEmployees [/color][color=#007700]As [/color][COLOR=#0000bb]Integer
[/COLOR][color=#007700]Public [/color][color=#0000bb]Sub [/color][COLOR=#007700]New()
[/COLOR][color=#0000bb]MaxEmployees [/color][color=#007700]= [/color][COLOR=#0000bb]100
End Sub
[/COLOR][color=#007700]Public [/color][color=#0000bb]Sub [/color][color=#007700]New([/color][color=#0000bb]ByVal max_employees [/color][color=#007700]As [/color][color=#0000bb]Integer[/color][COLOR=#007700])
[/COLOR][color=#0000bb]MaxEmployees [/color][color=#007700]= [/color][COLOR=#0000bb]max_employees
End Sub
[/COLOR][COLOR=#007700]...
[/COLOR][color=#0000bb]End [/color][COLOR=#007700]Class  
[/COLOR][color=#0000bb][/color][/COLOR]

Dim

نستخدم هذة الكلمة عندما نريد الاعلان عن متغيرات عادية ليست
ذا متطلبات معينة واساس عملها انها تخبر الفيجوال بانك تريد الاعلان
عن متغير ويمكنك حذف هذة الكلمة عند الاعلان بواسطة احدى هذة الكلمات
Public, Protected, Friend, Protected Friend, Private, Static, or ReadOnly.

حقيقتا اذا قمت بالاعلان عن متغير بواسطة احدى هذة الكلمات فان
محرر كود الفيجوال سيقوم بحذف كلمة Dim اذا كنت قد قمت بتضمينها
من قبل مثلا اكتب

كود :
[color=#000000][COLOR=#0000bb][/color][color=#007700]Public [/color][color=#0000bb]Dim X [/color][color=#007700]as [/color][COLOR=#0000bb]Integer  
[/COLOR][/COLOR]

وانتظر ماذا سيحدث
والمتغيرات المعلنة بواسطة كلمة Dim تعتبر في الحقيقة Private
انظر الى هاتين الجملتين انهما متساويتين


كود :
[color=#000000][COLOR=#0000bb]Dim num_people [/color][color=#007700]As [/color][COLOR=#0000bb]Integer
[/COLOR][color=#007700]Private [/color][color=#0000bb]num_people [/color][color=#007700]As [/color][COLOR=#0000bb]Integer  
[/COLOR][/COLOR]






WithEvents

هذة الكلمة المحجوزة تقوم بالاعلان عن تمتلك احداث يمكن التعامل
معها تماما كمثل الاحداث الاخرى باللغة


كود :
[color=#000000][COLOR=#0000bb][/color][color=#007700]Private [/color][color=#0000bb]WithEvents Face [/color][color=#007700]As [/color][COLOR=#0000bb]PictureBox  
[/COLOR][/COLOR]

وبعد الاعلان عن متغير بواسطة هذة الكلمة يقوم الفيجوال مباشرة
باضافة هذا المتغير الى القائمة المنسدلة Class Name التى توضح
ماهي مكونات البرنامج الرسومية وغيرها التي تمتلك احداث وايضا
يقوم باضافة احداث لذلك المتغير بالقائمة المنسدلة Method Name
ولقد تكلمنا عن هذا المتغير بدرس الادوات

---------

New

تقوم هذة الكلة المحجوزة باخبار الفيجوال بيسك بانشاء نسخة جديدة من Object الذي تريد انشاء نسخة منة
وبدونها فان المتغير الذي قمت بالاعلان عنة ليس لة مرجع وتكون قيمتة الابتدائية تساوي Nothing
مثال ليكن لدينا كلاس اسمة Emp ونريد انشاء نسختين منة على هذا الشكل


كود :
[color=#000000][COLOR=#0000bb] Dim E1 [/color][color=#007700]As [/color][COLOR=#0000bb]Emp
   E1[/COLOR][color=#007700]=New [/color][COLOR=#0000bb]Emp  
[/COLOR][/COLOR]


كود :
[color=#000000][COLOR=#0000bb] Dim E2 [/color][color=#007700]As New [/color][COLOR=#0000bb]Emp  
[/COLOR][/COLOR]

كلتا الجملتين صحيحة ولكن الجملة الثانية افضل لننا قمنا بجمع الجملتين السابقتين في جملة واحدة

الاعلان عن Array

هنالك عدة طرق للاعلان عن المصفوفات
1 – الاعلان واسناد القيمة ويجب ان لا نكتب حجم المصفوفة بهذة الحالة


كود :
[color=#000000][COLOR=#0000bb]Dim arr[/color][color=#007700]() As [/color][color=#0000bb]Integer [/color][color=#007700]= {[/color][color=#0000bb]1[/color][color=#007700], [/color][color=#0000bb]1[/color][color=#007700], [/color][color=#0000bb]2[/color][color=#007700], [/color][color=#0000bb]3[/color][color=#007700], [/color][color=#0000bb]5[/color][color=#007700], [/color][color=#0000bb]8[/color][color=#007700], [/color][color=#0000bb]13[/color][color=#007700], [/color][color=#0000bb]21[/color][color=#007700], [/color][color=#0000bb]33[/color][color=#007700], [/color][color=#0000bb]54[/color][color=#007700], [/color][color=#0000bb]87[/color][color=#007700]}    [/color][COLOR=#0000bb]ذات بعد واحد  
[/COLOR][/COLOR]


كود :
[color=#000000][COLOR=#0000bb]Dim arr[/color][color=#007700]( , ) As [/color][color=#0000bb]Integer [/color][color=#007700]= { {[/color][color=#0000bb]1[/color][color=#007700],[/color][color=#0000bb]2[/color][color=#007700],[/color][color=#0000bb]3[/color][color=#007700]}, [/color][COLOR=#0000bb]_
                                           [/COLOR][color=#007700]{[/color][color=#0000bb]4[/color][color=#007700],[/color][color=#0000bb]5[/color][color=#007700],[/color][color=#0000bb]6[/color][color=#007700]}}  [/color][COLOR=#0000bb]ذات بعدين  
[/COLOR][/COLOR]


2 – الاعلان بدون اسناد قيم عند الاعلان


كود :
[color=#000000][COLOR=#0000bb]Dim arr[/color][color=#007700]([/color][color=#0000bb]10[/color][color=#007700]) As [/color][COLOR=#0000bb]Integer  
[/COLOR][/COLOR]

وحجم هذة المصفوفة هو 11 عنصر من 0 - 10

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


كود :
[color=#000000][COLOR=#0000bb]Dim arr[/color][color=#007700]([/color][color=#0000bb]0 To 10[/color][color=#007700]) As [/color][COLOR=#0000bb]Integer  
[/COLOR][/COLOR]

3- الاعلان عن مصفوفة وتحديد حجمها لاحقا


كود :
[color=#000000][COLOR=#0000bb]Dim arr[/color][color=#007700]() As [/color][COLOR=#0000bb]Integer  
[/COLOR][/COLOR]

ولتحديد حجمها نستخدم الكلمة المحجوزة ReDim


كود :
[color=#000000][COLOR=#0000bb]ReDim arr[/color][color=#007700]([/color][color=#0000bb]10[/color][COLOR=#007700])  
[/COLOR][color=#0000bb][/color][/COLOR]

وعند اعادة تحجيم المصفوفة فانها تفقد بياناتها السابقة ولكي نقوم بالحفاظ عليها نستخدم الكلمة Preserve
كود :
[color=#000000][COLOR=#0000bb]ReDim Preserve arr[/color][color=#007700]([/color][color=#0000bb]10[/color][COLOR=#007700])  
[/COLOR][color=#0000bb][/color][/COLOR]

4- الاعلان عن مصفوفات من نوع كلاس


كود :
[color=#000000][COLOR=#0000bb]Dim employees[/color][color=#007700]([/color][color=#0000bb]0 To 10[/color][color=#007700]) As [/color][COLOR=#0000bb]Employee

[/COLOR][color=#007700]For [/color][color=#0000bb]I [/color][color=#007700]As [/color][color=#0000bb]Integer[/color][color=#007700]=[/color][COLOR=#0000bb]0 To 10
Employees[/COLOR][color=#007700]([/color][color=#0000bb]i[/color][color=#007700])=New [/color][COLOR=#0000bb]Employee
Next  
[/COLOR][/COLOR]



الاعلان المتتعد للمتغيرات :

الاعلان المتعدد يعني امكانية الاعلان عن اكثر من متغير في نفس الجملة البرمجية
فمثلا بدل ان نكتب


كود :
[color=#000000][COLOR=#0000bb]Dim x [/color][color=#007700]As [/color][COLOR=#0000bb]Integer
Dim y [/COLOR][color=#007700]As [/color][COLOR=#0000bb]Integer  
[/COLOR][/COLOR]

نكتبها بهذا الشكل


كود :
[color=#000000][COLOR=#0000bb]Dim x [/color][color=#007700], [/color][color=#0000bb]y [/color][color=#007700]As [/color][COLOR=#0000bb]Integer  
[/COLOR][/COLOR]

وبدل ان نكتب


كود :
[color=#000000][COLOR=#0000bb]Dim x [/color][color=#007700]As [/color][COLOR=#0000bb]Integer
Dim s [/COLOR][color=#007700]As [/color][COLOR=#0000bb]String  
[/COLOR][/COLOR]

نكتبها بهذا الشكل


كود :
[color=#000000][COLOR=#0000bb]Dim x [/color][color=#007700]As [/color][color=#0000bb]Integer[/color][color=#007700], [/color][color=#0000bb]s [/color][color=#007700]As [/color][COLOR=#0000bb]String  
[/COLOR][/COLOR]


كود :
[color=#000000][COLOR=#0000bb]Dim x [/color][color=#007700], [/color][color=#0000bb]y [/color][color=#007700]As [/color][color=#0000bb]Integer [/color][color=#007700], [/color][color=#0000bb]s [/color][color=#007700]As [/color][COLOR=#0000bb]String  
[/COLOR][/COLOR]

كما يمكن اسناد قيم اولية


كود :
[color=#000000][COLOR=#0000bb]Dim x [/color][color=#007700]As [/color][color=#0000bb]Integer [/color][color=#007700]=[/color][color=#0000bb]10[/color][color=#007700], [/color][color=#0000bb]s [/color][color=#007700]As [/color][color=#0000bb]String[/color][color=#007700]=[/color][color=#dd0000]"MGR"[/color][color=#007700],[/color][color=#0000bb]z [/color][color=#007700]As [/color][color=#0000bb]Float [/color][color=#007700]=[/color][COLOR=#0000bb]10.5  
[/COLOR][/COLOR]



المدى Scope

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

Block Scope

البلوك هو سلسلة من الجمل البرمجية التى تكون محصورة داخل اطار محدد له بداية ونهاية
مثل جمل التحكم البرمجي For ,If , Select Case

فالمتغير الذي نقوم بالاعلان عنة داخل For .. Loop فان مداة يكون ضمن ال For فقط

امثلة للاعلان عن متغيرات داخل بلوك

1- For..Loop


كود :
[color=#000000][COLOR=#0000bb][/color][color=#007700]For [/color][color=#0000bb]i [/color][color=#007700]As [/color][color=#0000bb]Integer [/color][color=#007700]= [/color][COLOR=#0000bb]1 To 5
Dim j [/COLOR][color=#007700]As [/color][color=#0000bb]Integer [/color][color=#007700]= [/color][COLOR=#0000bb]3
[/COLOR][color=#007700]If [/color][color=#0000bb]i [/color][color=#007700]= [/color][COLOR=#0000bb]j Then
Dim M [/COLOR][color=#007700]As [/color][color=#0000bb]Integer [/color][color=#007700]= [/color][color=#0000bb]i [/color][color=#007700]+ [/color][COLOR=#0000bb]j
Debug[/COLOR][color=#007700].[/color][color=#0000bb]WriteLine[/color][color=#007700]([/color][color=#0000bb]“M[/color][color=#007700]: [/color][color=#0000bb]“ [/color][color=#007700]& [/color][color=#0000bb]M[/color][COLOR=#007700])
[/COLOR][color=#0000bb]End [/color][COLOR=#007700]If
[/COLOR][COLOR=#0000bb]Next i  
[/COLOR][/COLOR]

2- Select Case
كل Case يمتلك مداة الخاص داخل Select Case


3- Try.. Catch
كل استثناء يعتبر بلوك خاص

كود :
[color=#000000][COLOR=#0000bb][/color][COLOR=#007700]Try
[/COLOR][color=#0000bb]Dim i [/color][color=#007700]As [/color][color=#0000bb]Integer [/color][color=#007700]= [/color][color=#0000bb]CInt[/color][color=#007700]([/color][color=#0000bb]“bad value”[/color][COLOR=#007700])
Catch [/COLOR][color=#0000bb]ex [/color][color=#007700]As [/color][COLOR=#0000bb]InvalidCastException
Dim txt [/COLOR][color=#007700]As [/color][color=#0000bb]String [/color][color=#007700]= [/color][COLOR=#0000bb]“InvalidCastException”
MsgBox[/COLOR][color=#007700]([/color][color=#0000bb]txt[/color][COLOR=#007700])
Catch [/COLOR][color=#0000bb]ex [/color][color=#007700]As [/color][COLOR=#0000bb]Exception
Dim txt [/COLOR][color=#007700]As [/color][color=#0000bb]String [/color][color=#007700]= [/color][COLOR=#0000bb]“Exception”
MsgBox[/COLOR][color=#007700]([/color][color=#0000bb]txt[/color][COLOR=#007700])
[/COLOR][color=#0000bb]End [/color][COLOR=#007700]Try  
[/COLOR][color=#0000bb][/color][/COLOR]

4 – If ..Then ..Else


كود :
[color=#000000][COLOR=#0000bb][/color][color=#007700]If [/color][COLOR=#0000bb]True Then  
Dim txt [/COLOR][color=#007700]As [/color][color=#0000bb]String [/color][color=#007700]= [/color][COLOR=#dd0000]"M"  
[/COLOR][color=#0000bb]MsgBox[/color][color=#007700]([/color][color=#0000bb]txt[/color][COLOR=#007700])
Else  
[/COLOR][color=#0000bb]Dim txt [/color][color=#007700]As [/color][color=#0000bb]String [/color][color=#007700]= [/color][COLOR=#dd0000]"E"  
[/COLOR][color=#0000bb]MsgBox[/color][color=#007700]([/color][color=#0000bb]txt[/color][COLOR=#007700])  
[/COLOR][color=#0000bb][/color][/COLOR]


5 – While ..Loop

المتغير ضمنها يكون متغير محلي

6 – Using


كود :
[COLOR=#000000][COLOR=#0000bb]Using _
emp1 [/COLOR][color=#007700]As New [/color][COLOR=#0000bb]Emp
Dim i [/COLOR][color=#007700]As [/color][COLOR=#0000bb]Integer

End Using  
[/COLOR][/COLOR]