01-10-12, 04:34 PM
كاتب الموضوع : Islam Ibrahim
الخصائص المعرفة تلقائياً Auto-Implemented Properties تمكنك من كتابة الخصائص الخاصة بفئتك دون الحاجة لكتابة حقول Get & Set يدوياً , وفي هذه الحالة يقوم مترجم Visual Basic بتوليد Private Fields من أجلك كما يقوم أيضاً بتوليد حقول Get و Set تلقائيا أثناء وقت الترجمة Compile Time (هذه الميزة تشبه إلى حد ما ال Automatic Properties والموجودة في #C) . الخاصية المعرفة تلقائياً تعد مكافئة لخاصية ذات حقل خاص Private field المثال التالي يوضح كيفية كتابتها:
كود :
Property Prop2 As String = "Empty"
كود :
Private _Prop2 As String = "Empty"
Property Prop2 As String
Get
Return _Prop2
End Get
Set(ByVal value As String)
_Prop2 = value
End Set
End Property
كود :
Public Property Name As String
Public Property Owner As String = "DefaultName"
Public Property Items As New List(Of String) From {"M", "T", "W"}
Public Property ID As New Guid()
عند استخدام خاصية معرفة تلقائياً يقوم المترجم بإضافة حقل خفي والذي سيحمل قيمة تلك الخاصية , هذا المتغير يحمل نفس النوع الذي تم به تعريف تلك الخاصية كما يحمل نفس الاسم مسبوقاً بعلامة (_) , على سبيل المثال إذا قمت بتعريف خاصية بالاسم ID سيكون اسم المتغير الخفي _ID , وفي هذه الحالة إذا قمت بتعريف متغير آخر ضمن نفس الفئة يحمل نفس الإسم _ID فإن ذلك سيحدث لبساً وسيقوم المترجم عندها بتوليد خطأ أثناء الترجمة .ال Backing field يتميز بالخصائص التالية:
- محدد الوصول ِAccess Modifier لهذا الحقل دائما Private حتى وإن كان محدد الوصول للخاصية المرتبطة به مختلفاً عنه كأن يكون Public.
- إذا تم تعيين الخاصية المعرفة تلقائياً على أنها مشتركة Shared فإن Backing field يكون أيضاً مشتركاً.
- المواصفات التي تنطبق على الخصائص المعرفة تلقائياً Attributes لا تنطبق على ال Backing field.
- يمكن الوصول لل Backing field من خلال الكود أو من خلال أداوت التنقيح Debugging Tools مثل Watch Window ومع ذلك لايمكن الوصول إليه من خلال Intellisence.
تهيئة الخصائص المعرفة تلقائياً Initializing Auto-Implemented Properties
- يمكن تهيئة خاصية معرفة تلقائياً تماماً مثل تهيئة أي متغير, عندما تقوم بذلك فإن المترجم سيقوم باختبار تلك التهيئة وتمريرها للإجراء Set , بحيث يمكن أيضًا تعيين القيمة الافتراضية والتي ستحملها الخاصية والتي سيحملها لاحقاً ال Backing field بدوره , المثال التالي يوضح ذلك:
كود :
Property FirstName As String = "James"
Property PartNo As Integer = 44302
Property Orders As New List(Of Order)(500)
- لا يمكن تهيئة خاصية معرفة تلقائياً إذا كانت أحد أعضاء واجهة Interface أو إذا كانت مجردة Abstract (محددة بال MustOverride Keyword)
- يمكن تهيئة خاصية معرفة تلقائياً لسجل Structure فقط إذا كانت مشتركة Shared.
- عند تعريف خاصية معرفة تلقائياً كمصفوفة فلن تتمكن من تحديد أبعادها بشكل صريح , ومع ذلك تستطيع إعطائها قيماً بواسطة تهيئتها كما يوضح المثال التالي:
كود :
Property Grades As Integer() = {90, 73}
Property Temperatures As Integer() = New Integer() {68, 54, 71}
الخصائص المعرفة تلقاءياً مفيدة كثيراً ويمكن استخدامها في سيناريوهات مختلفة , ولكن توجد بعض الحالات التي يتعذر فيها استخدامها , والتي لابد فيها من تعريف الخصائص بالطريقة القياسية أو بالطريقة الموسعة . لن تتمكن من استخدام الخصائص المعرفة تلقائياً في الحالات التالية:
- عند الحاجة لإضافة شفرات إضافية إلى أجزاء Get & Set , مثلاً عندما تريد التحقق من القيم الواردة إلى الخاصية كأن تقوم مثلاً بالتحقق من أن قيمة نصية واردة تحتوي على رمز معيّن قبل إسناد تلك القيمة إلى الخاصية.
- عند تحديد كيفية الوصول إلى الأجزاء Get & Set كأن تكون بحاجة مثلاً لجعل الجزء Get يمكن الوصول إليه Public في حين يكون جزء Set محمياً أو خاصاً Protected or Private .
- عندما تكون الخاصية للكتابة أو للقراءة فقط ReadOnly أو WriteOnly.
- عندما الحاجة لإضافة مواصفات Attributes إلى Backing field.
- عند الحاجة لإضافة تعليقات XML لل Backing field.
عندما ترغب في توسيع خاصية معرفة تلقائياً إلى خاصية قياسية أو موسعة , سيمكّنك محرر الكود عندها من القيام بذلك بحيث سيقوم بتوليد أجزاء Get & Set بالإضافة إلى السطر End Property تلقائياً وذلك بالوقوف في سطر فارغ أسفل تعريف الخاصية المعرفة تلقائياً وكتابة الحرف G (من أجل الجزء Get) أو الحرف S (من أجل الجزء Set) , ومن ثم الضغط على زر Emter, يقوم محرر الكود بتوليد أجزاء Get & Set من أجل القراءة /ReadOnly أو الكتابة فقط WriteOnly عند الضغط على Enter مباشرة بعد تعريف الخاصية.
منتهى الروعة! أليس كذلك؟
مترجم بتصرف.