دوت نت
الدرس(11):مدخل الى الفئات..الجزء الثاني
السلام عليكم ورحمة الله وبركاته
بسم الله الرحمن الرحيم
في هذا الدرس نكمل ما قد من حيث انتهينا
في الفصل السابق:
الدرس(10):مدخل الى الفئاتClasses - الجزء الأول
وقد ذكرنا أن الفئات تحتوي أربعة أجزاء وهي:
الحقول(Fields)
الطرق(Methods)
الخصائص(properties)
الأحداث(Events)
وتحدثنا عن الحقول والطرق واليوم ان شاء
الله سنبدأ بالخصائص...
الخصائص Properties
بطبيعة الحال فإن أي كائن يمتلك سمات وخصائص وهذا
هو المبدأ الذي تطبقه البرمجة الكائنية OOP
.
الأمر بسيط لكن يحتاج قليل من التركيز.
الآن يمكنك البدء بصنع خاصية باستخدام الكلمة المحجوزة
Property وننهيها
ب End Property
مثال:
كود:
Class Person
Property ****() As String
...
...
...
End Property
End Class
الآن داخل الفئة أضفنا الخاصية **** لكن
قد تلاحظ أنها تأخذ شكل الطريقة Method كما أنها تأخذ شكل الحقل Field
اذن يمكن القول بان الخاصية عبارة عن مدمج ما بين
الحقل و الطريقة.
لكن الخاصية تحتاج الى ضبط قيمة كما نحتاج ايضا الى
قراءة الخاصية.
يمكن ذلك باستخدام الكلمتين المحجوزتين Get و Set
أولا: الدالةGet:
تستخدم هذه الدالة لتزويدنا بقيمة الخاصية الحالية.
لكن علينا مسبقا تعريف متغير جديد من نوع الخاصية ليحمل القيمة وقت استرجاعها او ضبطها
مثال:
Class Person
Dim m_**** As String
Property ****() As String
Get
Return m_****
End Get
....
....
....
End Property
End Class
الآن كما نرى قمنا بصنع خاصية جديدة باسم
**** وقبلها عرفنا متغير من نوع الخاصية سنستخدمه في عملية الضبط والاسترجاع لهذه الخاصية
ويفضل تسمية هذا المتغير تسمية قريبة من اسم الخاصية ويمكنك ملاحظة ان معظم البرامج
تستخدم تسمية المتغير بهذه الطريقة m_****
أي باضافة m_ في بداية المتغير وبعدها
كتابة اسم الخاصية ويمكنكم ملاحظة أن الدالةGet
تحتاج ناتج والذي ارجعناه بواسطة الكلمة المحجوزة Return والتي شرحناها
في فصل الاجراءات والدوال
لكن كيف يمكننا الحصول على قيمة الخاصية ..
سهل جدا:
انظر المثال التالي:
Class Person
Dim m_**** As String = "Islam Son"
Property ****() As String
Get
Return m_****
End Get
..
..
..
End Property
End Class
الآن قمنا بصنع نفس الخاصية السابقة واسندنا
للمتغير m_**** قيمة افتراضية
"Islam Son" والآن داخل اي اجراء
استخدم التالي للاستعلام عن القيمة:
Dim Lo2i As New Person
MsgBox(Lo2i.****)
انظر الناتج..
ثانيا:الاجراء Set
الآن بعد أن عرفنا كيف نقوم بالاستعلام
فايضا قد يلزمنا اجراء لاسناد قيمة للخاصية
يتم ذلك عن طريق الاجراء Set
مثال:
كود:
Class Person
Dim m_**** As String = "Islam
Son"
Property ****() As String
...
...
...
Set(ByVal value As String)
m_**** = value
End Set
End Property
End Class
كما نرى فان الطريقة الخاصة بضبط القيمة هي Set
..كيف تعمل؟؟
تقوم هذه الطريقة بستقبال الوسيط
الذي نرسله بنفس نوع الخاصية وسميت افتراضيا بValue
ويمكنك تغيير المسمى فلا فرق وداخل هذا الاجراء قمنا باسناد قيمة
الوسيط المرسل الى المتغير m_****
حتى عند الاستعلام يرجع لنا بنفس القيمة التي مررناها له
هذا المثال يوضح كلا من Get وSet
المثال:
Class Person
Dim m_**** As String
Property ****() As String
Get
Return m_****
End Get
Set(ByVal value As String)
m_**** = value
End Set
End Property
End Class
Private Sub Form1_Load(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles My****.Load
Dim Lo2i
As New Person
Lo2i.****
= "Lo2i"
MsgBox(Lo2i.****)
End Sub
ويمكنك ملاحظة التالي:
عند استخدام هذه التعليمة
Lo2i.**** = "Lo2i"
فان الاجراء المستخدم هو Set لانه يتم
اسناد قيمة للخاصية
MsgBox(Lo2i.****)
فان الاجراء المستخدم حينها هو Get لانه يتم
الاستعلام عن قيمة الخاصية
ايضا ماذا ان اردنا جعل الخاصية محمية من القراءة
فقط نريدها للكتابة .....يمكنك باستخدام الكلمة المحجوزة WriteOnly
وبالتالي فان وجود الدالة Get
يسبب خطأ كما ان عملية الاستعلام عن قيمة الخاصية ايضا يسبب خطأ
مثال:
Class Person
Dim m_**** As String
WriteOnly Property ****() As String
Set(ByVal value As String)
m_**** = value
End Set
End Property
End Class
وهذا يفيد في منع الحصول على معلومات سرية
مثلا ككلمة المرور..
الآن هل يمكن ارسال اكثر من وسيط للخاصية...لا مشكلة
مثال:
كود:
Class Person
Dim
m_****(1) As String
Property ****(ByVal Index As Integer) As String
Get
Return m_****(Index)
End Get
Set(ByVal value As String)
m_****(Index) = value
End
Set
End
Property
End Class
الآن قمنا بصنع خاصية الاسم وجعلنا المتغير
المقترن بها على شكل مصفوفة تحتوي على عنصرين(1+1) على اعتبار الاسم الاول والاخير
وأضفنا وسيط للخاصية باسم Index
ليعمل عمل فهرس للاسمين الاول والثاني وعند عملية الاسناد في Set ترى ان
القيم المسندة تكون على شكل مصفوفة
الآن:
كود:
Dim Lo2i As New Person
Dim Full**** As String
Lo2i.****(0) = "Lo2i "
Lo2i.****(1) = "VB4ARAB"
For i = 0 To 1 Step 1
Full**** &= Lo2i.****(i)
Next
MsgBox(Full****)
أعلنا عن Lo2i
كPerson وقمنا باسناد القيمة الاولى والثانية للخاصية **** التي تحمل معنى مصفوفة
مكونة من عنصرين
وقمنا بصنع عداد لربط قيمتين الخاصية وقمنا بعرض
ناتج الربط والذي يحمله المتغير Full****
في رسالة
___________________________
مداخلة: "&" عملية تقوم بربط النصوص.
أما "&=" تقوم بربط ما قبل = بما بعدها
أي أن:
كود:
Full**** &= "Mr_MOHAMMED"
تعادل
كود:
Full**** = Full**** & "Mr_MOHAMMED"
ويمكن استخدام هذه الصورة مع باقي
العمليات الجبرية ..أي أن:
كود:
x += y
تعادل
كود:
x = x + y
___________________________
ملاحظتان:
يمكن استخدام مبدأ إعادة التعريف OverLoading مع الخصائص
يمكن استخدام الخصائص في الوحدات البرمجية
Modules والتركيبات
Structures
الخصائص الافتراضية:
هي الخصائص التي تمثل الفئة بشكل افتراضي ويمكنك
جعل خاصية افتراضية باستخدام الكلمة المحجوزة Defualt
مثال:
Class Person
Dim
m_****(1) As String
Default Property ****(ByVal Index As Integer) As String
Get
Return m_****(Index)
End Get
Set(ByVal value As String)
m_****(Index) = value
End
Set
End
Property
End Class
Dim Lo2i As New Person
Dim Full**** As
String
Lo2i(0) = "Lo2i "
Lo2i(1) =
"VB4ARAB"
For i = 0 To 1 Step 1
Full****
&= Lo2i(i)
Next
MsgBox(Full****)
End
Sub
قد تلاحظ أنه لا يتوجب ذكر الخاصية في عملية
الاسناد أو الاستعلام لانها كما قلنا تمثل الفئة
يمكنك ملاحظة هذا الشيء في فيجوال بيسك 6
فالتعليمتان التاليتان لهما نفس الوظيفة
كود:
****1.****="Mr_MOHAMMED"
كود:
****1 = "Mr_MOHAMMED"
ومن هذا نستنتج ان الخاصية الافتراضية هي
****
Abdalkader
Al-badani
انتظروا الدرس القادم
ليست هناك تعليقات:
إرسال تعليق