الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

درس:OOP Series - Properties in VB.NET

مغلق
بدأه hazzoom في 20 سبتمبر 2005 · 11 رد · 4,449 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته :

استكمالا لسلسلة دروس الـ OOP في VB.NET( ان جاز اطلاق لقب سلسله عليها) ...,,,

وكما وعدتكم سابقا في الدرس السابق Inheritance in VB.NET بدرس في الـ Properties فسوف يكون درسنا عن كيفية تصميم أو عمل Property أو خاصيه لـ Object وهذا الـ Object قد يكون Class أو Component وقد وضحنا كل منهما والعلاقه بينهما في أول درس Classes in VB.NET ولكن أولا دعوني أوضح الـ Structure الخاص بالـ Class , وبعد ذلك يتم تجميع هذه الـ Class في Namespace كالآتي :

Namespace [Namespace Name]
   
Public Class [Class Name]
   
    'Member variables
   
    'Methods
   
    'Properties
   
    'Events
    
End Class
   
End Namespace

*******************************************************************************

نتعامل كثيرا أو دائما عند عمل أي برنامج مع الـ Buttons و الـ TextBoxes كالآتي :

TextBox1.Text = "this is a text property of text box"

وعلي الرغم من أننا جميعا نتعامل مع هذه الخاصيه جيدا لكن البعض لا يعلم أنها Property ولا يعرف كيفية عملها , لذلك حتي نتعلم كيفية عمل الـ Property أتبع الخطوات التاليه معي :

1- افتح الفيجوال ستوديو وأنشئ مشروع جديد باسم OOP Series - Properties in VB.NET .

2- أضف Class جديده وأظن أننا نعرف ما معني الكلاس جيدا Employee .

3- في داخل كود الـ Class اكتب الاعلان التالي :

Public Property name

ثم أضغط زر Enter وسوف تجد أنه تمت اضافة الكود ليصبح هكذا :

    Public Property name()
        Get

        End Get
        Set(ByVal Value)

        End Set
    End Property

هذه هي الصيغه القياسيه للـ Property وتوجد صيغ أخري سنناقشها لاحقا ,,,

ستجد أن كود الـ Property ينقسم الي قسمين أساسين هما Get و Set و عن طريق هذين المقطعين نستطيع اسناد أو جلب بيانات الخاصيه name الخاصه بالـ Class Employee .

حسنا وكيف نسند بيانات الي الخاصيه ,

4- اذن يجب انشاء متغير يحمل البيانات :

Dim employee_name As String

ملحوظه : يفضل الاعلان عن المتغير قبل الاعلان عن الـ Property .

5- ثم نكتب الكود التالي في المقطع Get :

Return employee_name

وذلك حتي عندما نقوم بطلب البيانات من الـ Property تعود القيمه المسنده الي المتغير employee_name .

6- وفي المقطع Set نقوم بكتابة الكود التالي :

employee_name = Value

حيث أننا بذلك قمنا باسناد القيمه التي سيتم وضعها في المتغير employee_name الي الـ Property عن طريق الـ Parameter Value .

هكذا نكون قد انتهينا من تصميم الـ Property وهذه هي أبسط الطرق , ولكي نتعامل مع هذه الـ Property من خلال البرنامج :

7- اذهب الي الـ Form وأنشئ Object من الـ Class Employee :

Dim xx As New Employee

وأضف زرين أحدهما Set و الاخر Get ,

8- وفي كود الـ Set نكتب :

xx.name = "hazzoom"

وبذلك نكون قد أسندنا الي الخاصيه name في الكائن Employee القيمه hazzoom .

حسنا وكيف نتأكد من ذلك ,

9- ضع في كود الـ Get :

MsgBox(xx.name)

قم بتنفيذ البرنامج F5 واضغط علي Set أولا (لن يحدث شئ مرئي) ثم أضغط علي Get سوف تظهر رساله بها القيمه التي أسندناها في كود الـ Set ,

****************************************************************************

أما بالنسبه للصيغ الأخري للـ Properties , هناك بعض الخواص التي لا تسمح بعمل Set للقيمه الموجوده بها لأنها قد تسبب خطأ في التنفيذ أو ما يشبه ذلك أو لأنها بيانات ثابته لا يتم تغييرها تحت أي ظرف من الظروف , فكيف يكون انشاء مثل هذه الخواص :

ننشئ هذه النوع من الـ Properties عن طريق الاعلان عن متغير أولا يحمل قيمة الـ Property :

Dim employee_salary As Integer = 100

ثم نعلن عن الـ Property كالتالي :

Public ReadOnly Property salary

وأضغط Enter وسيتم استكمال باقي الكود , وستجد أنه لم يتم الا اضافة المقطع Get فقط لأنها الخاصيه ReadOnly , وفي كود الـ Get أضف :

Return employee_salary

ثم في كود الفورم نضع زر جديد باسم Get Salary :

MsgBox(xx.salary)

قم بتنفيذ البرنامج F5 وأضغط Get Salary وأنظر ما سيحدث :

تظهر رساله بها القيمه التي أسندناها الي المتغير employee_salary .

هناك نوع آخر من الـ Properties يكون لعرض لاسناد القيم فقط , ويتم الاعلان عنها كالتالي :

Public WriteOnly Property Address

ثم أضغط Enter فيتم استكمال باقي الكود وستجد طبعا المقطع Set فقط ,

ونعلن عن متغير لاستقبال القيمه :

Dim employee_address As String

وفي المقطع Set ضع الكود التالي :

employee_address = Value

أذهب الي الفورم وضع زر Set Address وفي حدث الضغط عليه أضف الكود التالي :

xx.Address = "Assiut-Egypt"

وبذلك نكون قد أسندنا الي الخاصيه Address القيمه Assiut-Egypt ,,,

وهذه هي الأنواع الثلاثه للـ Property ,,,

أرجو أن أكون قد وفقت في توصيل ماهية الـ Property وكيفية عملها وان كان توفيق فمن الله وان تقصير فمني والله الموفق .....,,,,

لو وجد أي خطأ ارجو تنبيهي , جزاكم الله خيرا ,,,

أرجو منكم الدعاء ...,,,

Classes in VB.NET

Inheritance in VB.NET

OOP Series - Properties in VB.NET.rar

تم تعديل هذه المشاركة بواسطة crazy-man في 24 سبتمبر 2005 في 04:10

#2

جزاك الله خير

شكرا على الدرس الممتع

وفوق كل ذي علم عليم

http://www.leaderstechnology.com

-------------------------------

#3

السلام عليكم ورحمة الله

بارك الله فيك اخ حازووم على هذا الدرس

اقتباس
CODE

   Public Property name()

       Get

       End Get

       Set(ByVal Value)

       End Set

   End Property

الخصائص ما هى الا اجراءات ولكن من نوع خاص ويجب دائما توضيح نوع القيمة العائدة من هذا الاجراء

مثلا

Public Property Name ()as string

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

كما يمكن للخصائص ان تاخذ بارميترات لها كما فى الاجراءات

Public Property Name(byval var as string)as string

المتغير الذى سنحتفظ به بقيمة الخاصية دائما يتم تعريفة بمحدد الوصول private ويفضل كتابته بهذه الطريق

Private m_EmpName As String

تم تعديل هذه المشاركة بواسطة SOLO.NET في 20 سبتمبر 2005 في 20:54

VB.NET and C# Comparison

http://www.harding.edu/fmccown/vbnet_csharp_comparison.html

002.gif

=-=-=-=-=-=-=
ذو العلم يشقى فى النعيم بعلمه .:. واخو الجهالة فى الشقاوة ينعم
=-=-=-=-=-=-=
يا من بدنياه اشتغل . قد غره طول الأمل . فالموت يأتى بغتة . والقبر صندوق العمل
=-=-=-=-=-=-=
ان لم تستطع ان تجد ما تفعله فافعل ما لم تسطع ان تجده

screen_shot_2011-05-19_at_12.44.49_pm.pn

#4

شكراا للأخ server_programmer للمتابعه ...,,,

جزاك الله خيرا يا أخ عبد الخالق علي الاضافه القيمه ...,,,

اقتباس
ويجب دائما توضيح نوع القيمة العائدة من هذا الاجراء

نسيت هذه النقطه شكرا للتنبيه ...,,,

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

معلومه جديده ونريد مثال ...,,,

تم تعديل هذه المشاركة بواسطة hazzoom في 20 سبتمبر 2005 في 22:55

#5

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

انا فقط عندي مداخلة بسيطة و هي أن بعض الأخوة قد يسأل السؤال التالي :

مثلا عندي كلاس معين اسمه مثلا Point أعلنت فيه متغير مثلا مثل X

اذا يمكنني التعامل مع هذه المتغيرات بهذه الطريقة

Point.X="20"
'هذه ستعطي قيمة للمتغير X
msgbox Point.X
'هذه ستقرأ القيمة من المتغير X

اذا انطلاقا من هذا الكود البسيط تبين لنا انه عملنا نفس عمل ال Properties لكن دون اللجوء لأنشاءها فقط تعاملنا مع المتغيرات مباشرة ... اذا ما فائدة هذه ال Properties؟؟؟

الجواب على هذا السؤال جد بسيط

ماذا لو كنا نريد ان نتحكم في القيمة الممررة الى المتغير ... يعني مثلا نريد أن لا تقل القيمة الممررة الى X عن صفر فهل الكود أعلاه سينفع !!!! طبعا لا

اذا الحل يكمن في انشاء Property بهذا الشكل

Dim m_X As Integer
Public Property X() As Integer
       Get
return m_X
       End Get
       Set(ByVal Value As Integer)
if value <0 then 
m_X=0
else
m_X=Value
end if
       End Set
   End Property

و السلام عليكم

تم تعديل هذه المشاركة بواسطة crazy-man في 20 سبتمبر 2005 في 22:51

#6
اقتباس
QUOTE

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

معلومه جديده ونريد مثال ...,,,

كل ما عليك لجعل الخاصية افتراضية هو كتابة الكلمة المحجوزة Default

لنفترض اننا نريد اضافة خاصية تمثل عنوان الموظف ونريد هذه الخاصية ان تكون افتراضية فنكتبها بهذا الشكل

Private m_EmpAddress(2) As String
Property Address(ByVal index As Integer) As String
Get
If index >= 0 And index <= UBound(m_Address) Then
Return m_Address(index)
End If
End Get
Set(ByVal Value As String)
If index >= 0 And index <= UBound(m_Address) Then
m_Address(index) = Value
End If
End Set
End Property

وعند انشاء كائن من كلاص الموظفين يمكن اسناد عنوان الموظف الى الخاصية Address من دون ذكرها فقط قم بتمرير الوسيط الذى تستقبله الخاصية لان الحقل m_EmpAddress(2)عبارة عن مصفوفة

Dim xx As New Employee
xx.Name="solo.net"
xx(0)="jordan"
xx(1)="amman"

لاحظ اننا قمنا بكتابة اسم الخاصية بالنسبة لللاسم اما بالنسبة للعنوان فلم نقم بكتابتها لانها افتراضية

مثل هذه الخصائص الافتراضية سبق لك وان تعاملت معها فالخاصية item تعتبر خاصية افتراضية للعديد من الكائنات فى vb.net

VB.NET and C# Comparison

http://www.harding.edu/fmccown/vbnet_csharp_comparison.html

002.gif

=-=-=-=-=-=-=
ذو العلم يشقى فى النعيم بعلمه .:. واخو الجهالة فى الشقاوة ينعم
=-=-=-=-=-=-=
يا من بدنياه اشتغل . قد غره طول الأمل . فالموت يأتى بغتة . والقبر صندوق العمل
=-=-=-=-=-=-=
ان لم تستطع ان تجد ما تفعله فافعل ما لم تسطع ان تجده

screen_shot_2011-05-19_at_12.44.49_pm.pn

#7

كلام جميل

ولكن هناك سؤال ما الفرق بين الخاصية العادية واللي كودها كالاتي

private variable as data type

public property xxxxx as data type

get

return variable

end get

set(byval value as data type)

variable = value

end set

end property

و خاصية text مثلا التي تخص button او اي اداة اخري

انا عارف ان السؤال ممكن يكون فيه شئ من الغباء او ان اجابته المفروض اكون عارفها بس بصراحة انا لا اعرفها :(

لا اله الا الله عليها نحيا وعليها نموت وفي سبيلها نجاهد

#8

أخي العزيز ال Property تكتب داخل كلاس معين لذا فهي تكون عنصر من هذا الكلاس مثلا :

Public Class My_Class
    Private m_Caption As String
    Public Property Caption() As String
        Get
            Return m_Caption
        End Get
        Set(ByVal Value As String)
            m_Caption = Value
        End Set
    End Property
End Class

اذا استدعاء هذه الخاصية يكون كالتالي

My_Class.Caption="CrazyMan"

و هذه ال Property يمكن استعمالها في الأدوات أيضا يعني مثلا نريد أن نضيف خاصية Caption لل Button ما علينا سوى وراثة الاداة ثم اضافة الخاصية اعلاه ليكون الكود كالتالي

Public Class My_Class
    Inherits System.Windows.Forms.Button
    Private m_Caption As String
    Public Property Caption() As String
        Get
            Return m_Caption
        End Get
        Set(ByVal Value As String)
            m_Caption = Value
        End Set
    End Property
End Class

هذا فقط مثال

اتمنى ان يكون جوابي هو ما كنت تريد

و السلام عليكم

#9

اكثر من رائع يا حازم :rolleyes:

واصل ابداعاتك,,

Hany Saad Mostafa

ITI (Information Technology Institute) l

SD Dept.-Teaching Assistant

---

اسألكم الدعاء بظهر الغيب

#10

اشكرك crazy man ولكن اقصد ان هل هذا هو نفس او شبيه بالكود الذي يكون للخاصية مثل right to left او غيرها ام ان هناك كود مختلف

لا اله الا الله عليها نحيا وعليها نموت وفي سبيلها نجاهد

#11

بعد اذن الأخ أيوب :

علي ما أعتقد أن خاصية RightToLift لها الصيغه الـ Standered مثل أي خاصيه أخري أي أن لها نفس الهيكل Get و Set ولكن أن التحويل نفسه (من اليمين الي اليسار) لابد وأن يعتمد علي دوال الـ API ثم يتم تغليف هذه الدوال في صورة Property بالاضافه الي أنها تعتمد علي الـ Enumeration لتعطيك الخيارات الثلاثه الموجوده فقط , ولمعرفة كيف يتم عمل Enumeration في الـ Property هنا ستجد ان شاء الله الطريقه : فكرة حول Custom Control

22_09_05_06_02_37_11273941571.JPG

هذا والله أعلم ...,,,

وان كان للأخ أيوب أي تعقيب فيلتفضل ...,,,

وشكرا للأخوة علي الردود ...,,,

تم تعديل هذه المشاركة بواسطة hazzoom في 22 سبتمبر 2005 في 15:57

#12

بارك الله فيك أخي العزيز حازم فقد قلت ووفيت

ذا من أجل الخواص مثل التي ذكرتها أخي محمد فهي تستعمل عن طريق ال Property الفرق هو نوع ال Property يعني مثال بسيط نقوم أولا بعمل Enumeration على الشكل التالي :

Enum e_Language
Arabic=0
English=1
French=2
End Enum

علما بأننا نريد عمل خاصية تحدد لنا لغة ظهور MsgBox

قنوم بعد ذلك باعلان متغير يأخذ قيمة ال Enum و هو من نوع ال e_Language طبعا

Private m_Language As e_Language

بعد ذلك نقوم بانشاء ال Property التي تكون من نوع e_Language و كودها هو التالي :

Public Property Language() As e_Language
        Get
            Return m_Language
        End Get
        Set(ByVal Value As e_Language)
            m_Language = Value
            Select Case m_Language
                Case 0
                    MsgBox("أنا أحب الفيجوال بيسك . نت")
                Case 1
                    MsgBox("I Love Visual Basic .NET")
                Case 2
                    MsgBox("J'adore le Visual Basic .NET")
            End Select
        End Set
    End Property

و هكذا و اذا كنت قد صممت كونترول ستجد خاصية جديدة اسمها Language تعطيك لائحة منسدلة فيها اللغات التي تريد

أتمنى أن يكون المثال واضح و اذا كان أي غموض فانا في الخدمة

و السلام عليكم

هذا الموضوع مغلق.

مواضيع مشابهة