تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
الطرائق المُوَسِّعة Extension Methods من جديد VB2008
#1
كاتب الموضوع : samerselo

يقدم فيجول بايزيك 2008 الطرائق المُوَسِّعة Extension Methods التي تمكن المطور من إضافة وظائف مخصصة لأنواع البيانات المعرفة سابقا من دون إنشاء نوع جديد مشتق. مما يمكنك من كتابة طريقة يمكن أن تستدعى كما لو كانت من ضمن النوع الموجود. والطريقة الموسعة يمكن أن تكون إجراء Sub أو وظيفة Function ولا يمكن أن تكون خاصية Property أو حقل Field أو حدث Event وجميع الطرائق الموسعة يجب تعليمها بالصفة <Extension()> من مجال الأسماء System.Runtime.CompilerServices وتحدد الوسيطة الأولى في الطرائق الموسعة نوع البيانات المراد الذي سيطلق الطريقة.
في المثال التالي يتم تحديد الطريقة Print لتوسيع نوع البيانات string والتي تستخدم Console.WriteLine لإظهار النص حيث يؤسس الوسيط aString أن الطريقة Print توسع الفئة String

كود :
Imports System.Runtime.CompilerServices

Module StringExtensions

<Extension()> _
Public Sub Print(ByVal aString As String)
Console.WriteLine(aString)
End Sub

End Module
لاحظ أن تعريف الطريقة الموسعة محدد بالصفة <Extension()> ويكون تعليم الـ Module الحاوية للطريقة اختياري ولكن كل طريقة موسعة يجب أن يتم تعليمها بالصفة المذكورة كما يجب استيراد مجال الأسماء System.Runtime.CompilerServices حتى نتمكن من الوصول إلى تلك الصفة. ولا يمكن تعريف الطرائق الموسعة إلا ضمن module ونموذجيا تعرف الطريقة الموسعة في نفس الـ Module التي ستستدعيها وبدلا عن ذلك يتم استيرادها في المكان الذي سنحتاج لاستخدامها فيه فبعد الـ Module التي تحتوي على الطريقة Print يمكن استدعاء الطريقة عندما يكون هناك طريقة لا تأخذ وسائط مثل ToUpper

كود :
Imports ConsoleApplication2.StringExtensions

Module Module1

Sub Main()

Dim example As String = "Hello"
' Call to extension method Print.
example.Print()

' Call to instance method ToUpper.
example.ToUpper()
example.ToUpper.Print()

End Sub

End Module
وفي المثال التالي تكون PrintAndPunctuate طريقة موسعة أخرى للنوع String وفي هذه المرة تمتلك وسيطتين الأولى aString تحدد أن الطريقة توسع النوع String وتكون الوسيطة الثانية punc عبارة عن سلسلة من علامات الترقيم التي ستمرر عند استدعاء الطريقة التي تظهر نصا متبوعا بعلامات الترقيم

كود :
<Extension()> _
Public Sub PrintAndPunctuate(ByVal aString As String, _
ByVal punc As String)
Console.WriteLine(aString & punc)
End Sub
حيث يتم استدعاء الطريقة بتمرير وسيطة نصية لـ punc مثلا example.PrintAndPunctuate(".")
ويظهر المثال التالي تحديد واستدعاء Print و PrintAndPunctuate واستيراد System.Runtime.CompilerServices الذي يمكن من الوصول إلى الصفة التي تحدد الطرائق الموسعة

كود :
Imports System.Runtime.CompilerServices

Module StringExtensions

<Extension()> _
Public Sub Print(ByVal aString As String)
Console.WriteLine(aString)
End Sub

<Extension()> _
Public Sub PrintAndPunctuate(ByVal aString As String, _
ByVal punc As String)
Console.WriteLine(aString & punc)
End Sub

End Module
ثم يتم استدعاء الطرائق الموسعة

كود :
Imports ConsoleApplication2.StringExtensions
Module Module1

Sub Main()

Dim example As String = "Example string"
example.Print()

example = "Hello"
example.PrintAndPunctuate(".")
example.PrintAndPunctuate("!!!!")

End Sub
End Module
الرد }}}
تم الشكر بواسطة:


الردود في هذا الموضوع
الطرائق المُوَسِّعة Extension Methods من جديد VB2008 - بواسطة Raggi Tech - 02-10-12, 07:30 PM

المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
Rainbow [VB.NET] كلاس ResizeControls وطريقة جديد ومميزة لتكبير وتصغير ادوات الفورم تلقائيا الماجيك مسعد 9 10,564 19-07-25, 05:59 PM
آخر رد: Mostafa25
  Private Text Encryption -خدمة للمبرمجين في جديد عالم التشفير- RaggiTech 1 3,793 07-05-20, 05:48 AM
آخر رد: سعود
Lightbulb [VB.NET] تايمر جديد اسرع بأضعاف من التايمر العادي ؟! 3booody 9 5,986 27-11-19, 11:33 PM
آخر رد: 3booody
  Nullable Value Types في VB2008 oneyemenweb2 0 1,975 06-10-12, 11:37 PM
آخر رد: oneyemenweb2
  كونترول جديد من مايكروسوفت MsChart Control RaggiTech 1 3,412 05-10-12, 03:04 PM
آخر رد: RaggiTech
  نوع بيانات جديد (تاريخ) RaggiTech 0 2,257 05-10-12, 03:34 AM
آخر رد: RaggiTech
  جديد 2010- اكتب الكود الذي سيستخدم فئتك ثم قم بإنشائها RaggiTech 0 2,448 03-10-12, 12:27 PM
آخر رد: RaggiTech
  الاستدلال المحلي على النوع Local Type Inference من جديد VB2008 RaggiTech 0 2,200 02-10-12, 09:43 AM
آخر رد: RaggiTech
  الأنواع المجهولة Anonymous Types، من جديد VB 2008 RaggiTech 0 2,062 02-10-12, 08:57 AM
آخر رد: RaggiTech
  أفضل طريقة لإنشاء كائن جديد - شارك في النقاش RaggiTech 1 2,140 01-10-12, 11:07 PM
آخر رد: RaggiTech

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم