Για το σκοπό αυτό υπάρχουν τα Generics, τα οποία αναλαμβάνουν να περάσουν το σωστό τύπο κατά το compile time παρέχοντας έτσι type safety. Στη VB.NET θα έγραφες π.χ.
Sub ShowHouseObjDescription(Of T As {HouseObjectBase, New})()
Dim anObject As New T()
Console.WriteLine(anObject.Description())
End Sub
Sub Main()
ShowHouseObjDescription(Of HouseChair)()
ShowHouseObjDescription(Of HouseTable)()
End Sub
Τα As {HouseObjectBase, New} είναι constraints τα οποία λένε στον compiler ότι ο τύπος που επιτρέπεται να χρησιμοποιηθεί θα πρέπει να κληρονομεί από το HouseObjectBase και να έχει constructor. Αν προσπαθούσες να περάσεις π.χ. ένα integer ή string, θα αποτύγχανε το compile.
Ο compiler μπορεί να καταλάβει τον τύπο που χρησιμοποιείς και από τις παραμέτρους της συνάρτησης, οπότε δεν υπάρχει ανάγκη να προσθέσεις το Of HouseChair. Θα μπορούσες π.χ. να γράψεις:
Sub ShowHouseObjDescription(Of T As HouseObjectBase)(ByVal anObject As T)
Console.WriteLine(anObject.Description())
End Sub
Sub Main()
ShowHouseObjDescription(New HouseChair())
ShowHouseObjDescription(New HouseTable())
End Sub
Παναγιώτης Καναβός, Freelancer
Twitter: http://www.twitter.com/pkanavos