الواجهات Interfaces - RaggiTech - 03-10-12
كاتب الموضوع : samerselo
أفترض بمن يتابع معي أن تكون له دراية عن الفئات وإنشائها والتعامل معها
الواجهة هي نوع مرجعي تستخدمه الأنواع الأخرى لضمان أنها تدعم عملية معينة وهي تحدد عناصر معينة يجب أن تتضمنها الفئات التي تحقق هذه الواجهات وهي تحتوي على طرائق وخصائص وعناصر أحداث تماما كالفئات
الصيغة العامة
كود :
[ <attributelist> ] [ accessmodifier ] [ Shadows ] _
Interface name [ ( Of typelist ) ]
[ Inherits interfacenames ]
[ [ modifiers ] Property membername ]
[ [ modifiers ] Function membername ]
[ [ modifiers ] Sub membername ]
[ [ modifiers ] Event membername ]
[ [ modifiers ] Interface membername ]فئة
[ [ modifiers ] Class membername ]
[ [ modifiers ] Structure membername ]
End Interface
وكما نرى من الصيغة العامة فيسبق التصريح عن الواجهة واصفات Attributes وكلمات تحديد المجال مثل Public أو الكلمة Shadows التي تعني أن هذه الواجهة تعيد تعريف واجهة موجودة وبنفس الاسم كما يمكن وراثة واجهة من أخرى تماما كالفئات وهي تحتوي على نفس العناصر الممكن احتوائها ضمن الفئات من وظائف ودالات وخصائص ... الخ ولكنها تحدد تعريف هذه الوظائف والخصائص فقط بدون الكود الذي يحدد عملها ويجب على أي فئة تحقق واجهة معينة أن توفر الكود العملي لكافة العناصر الموجودة ضمن هذه الواجهة ويمكن تعريف الواجهة على مستوى Namespace أو Module أي يجب أن يكون تعريفها عاما وغير محصور ضمن إجراء معين كما يمكننا تعشيش الواجهات بحيث أن أية واجهة ممكن أن تتضمن واجهة أخرى كما يمكن تحديد خاصية افتراضية باستخدام الكلمة Default ولا يمكن استخدام محددات الوصول مثل Public أو Private عند التصريح عن عناصر الواجهة ولكن يمكن استخدام Overloads أو Shadows وعندما تستخدم واجهة ضمن فئة يتم الإعلان عن عناصر هذه الفئة باستخدام محدد الوصول Public افتراضيا الأمر الذي يمكنك تغييره لاحقا على مستوى تلك الفئة كما لا يمكن التصريح عن متغيرات ضمن الواجهة وعند تسمية الواجهات يفضل أن يبدأ الاسم دوما بالحرف I
لنرى الآن بعض الأمثلة عن الواجهات
يمكن أن نعرف واجهة لأشخاص تحتوي على بعض الخصائص كما يلي
كود :
Interface IPerson
Property Name() As String
Property Birthdate() As Date
ReadOnly Property Age() As Integer
End Interface
أو يمكننا تعريف واجهة لبعض العمليات الحسابية
كود :
Interface ISomeMath
Function AddNumbers(ByVal a As Integer, ByVal b As Integer) As Integer
Function AddNumbers(ByVal a As Double, ByVal b As Double) As Double
Function Multiply(ByVal a As Integer, ByVal b As Integer) As Double
End Interface
كما يمكن أن نعرف واجهة لدفتر الهواتف ترث واجهة الأشخاص كما يلي
كود :
Interface IPhonebook
Inherits IPerson
Property Phone() As String
Property Address() As String
Sub ShowInformations()
End Interface
الآن إن كانت لدينا فئة للهواتف نريد منها أن تحقق الواجهة Phonebook نستخدم الكلمة Implements تماما بعد التصريح عن تلك الفئة وسنرى أن بيئة التطوير ستضيف الهيكل الأساسي لعناصر تلك الواجهة إلى الفئة الجديدة
كود :
Public Class Phones
Implements IPhonebook
Public ReadOnly Property Age() As Integer Implements IPerson.Age
Get
End Get
End Property
.......
End Class
كما يمكن استخدام أكثر من واجهة ضمن الفئة الواحدة
كود :
Class SomeTest
Implements IPerson
Implements ISomeMath
Public ReadOnly Property Age() As Integer Implements IPerson.Age
Get
End Get
End Property
.......
Public Function AddNumbers(ByVal a As Double, ByVal b As Double) As Double _
Implements ISomeMath.AddNumbers
End Function
.......
End Class
ويبقى عليك كتابة الكود المناسب لتلك العناصر بما يتناسب مع وظيفة الفئة التي تعمل عليها لاحظ تعريف جميع العناصر المضافة باستخدام محدد الوصول Public في هذه المرحلة
وهذا مثال على تعشيش الواجهات بداخل بعضها
كود :
Interface IPhonebook
Interface IPersone
Property Name() As String
Property Birthdate() As Date
ReadOnly Property Age() As Integer
End Interface
Property Phone() As String
Property Address() As String
Sub ShowInformations()
Event SomeEvent(ByVal a As Int16)
End Interface
واستخدامها ضمن الفئة
كود :
Class test
Implements IPhonebook
Implements IPhonebook.IPersone
.......
End Class
|