بعد ان تم شرح المفهوم الاساسي للGenerics في الدرس السابق و أيضا تم شرح ال Generics بوجه خاص في ال VB.net ننتقل الان الى الجزء الثاني و هو ال Generic Functions
تابع معي هذا الكود
Module Module1
Sub Main()
Dim I As Integer = 5
Dim J As Integer = 7
Swap(Of Integer)(I, J)
Console.WriteLine("I = " & I)
Console.WriteLine("J = " & J)
Dim S As String = "Paul"
Dim R As String = "Lori"
Swap(Of String)(S, R)
Console.WriteLine("S = " & S)
Console.WriteLine("R = " & R)
Console.ReadLine()
End Sub
Public Sub Swap(Of T)(ByRef a As T, ByRef b As T)
Dim temp As T
temp = a
a = b
b = temp
End Sub
End Moduleفي هذا الModule قمنا بعمل الfunction الشهيرة Swap و لكن على طريقة الGenerics اي انها تقوم بعمل الSwap للDataType المحدد لها اثناء الCall .
تابع في الMain ستجد اولا
Swap(Of Integer)(I, J)
و هنا اصبحت الFunction موجهة الى عمل Swap للمتغيرات من نوع Integer
ثم قمنا بعد ذلك بمناداة نفس الFunction و لكن هكذا
Swap(Of String)(S, R)
فأصبحت الFunction تقوم بعمل Swap للمتغيرات من نوع String و هكذا
اعتقد ان الفكرة مفهومة و لكن هل هذا كل شئ؟
لا و لكن يمكنك ان تضع بعض الConstraints او القيود على الType الذي تقبله الFunction تابع هذا الكود
Public Sub Swap(Of T As Structure)(ByRef a As T, ByRef b As T) Dim temp As T temp = a a = b b = temp End Sub
لاحظ كلمة Structure الموجودة و التي حددت ان يكون الDataType الذي يراد عمل الSwap للمتغيرات من نوعه هو Structure معنى هذا ان هذه الFunction لا يمكن استخدامها هكذا
Swap(Of String)(S, R)
لان المتغيرات من نوع String لا تخضع لهذا الشرط
جميل جدا بقيت نقطة اخيرة
ماذا عن الOverloading ؟
تابع معي هذا الكود
Sub Foo Sub Foo(ByVal s As String) Sub Foo(Of T)( ByVal arg As T) Sub Foo(Of T, U)(ByVal arg1 As T, ByVal arg2 as U)
ستجد ان تواجد هذه الSubs سويا في Class او Module واحد صحيح 100%
ملحوظة: مترجم عن موقع www.developer.com