Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Base class type παράμετρο σε sub

Îåêßíçóå áðü ôï ìÝëïò entrodus. Τελευταία δημοσίευση από το μέλος entrodus στις 20-06-2008, 11:12. Υπάρχουν 2 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  19-06-2008, 12:31 42978

    Base class type παράμετρο σε sub

    Πως μπορώ να περάσω παράμετρο ένα συγκεκριμένο class type το οποίο στη συνέχεια θα το κάνω create?
    Μιλάμε για vb.net και το πρόβλημα μου είναι ότι δεν θέλω να το περάσω ως instance αλλά μόνο το type.

    Π.χ. αν έχω τις παρακάτω κλάσεις:

    Public MustInherit Class HouseObjectBase
    Public MustOverride Function Description() As String
    End Class

    Public Class HouseTable
    Inherits HouseObjectBase
    Public Overrides Function Description() As String
    Return "This is a table"
    End Function
    End Class

    Public Class HouseChair
    Inherits HouseObjectBase
    Public Overrides Function Description() As String
    Return "This is a chair"
    End Function
    End Class



    Θέλω να φτιάξω την sub ShowHouseObjDescription που θα περνάω παράμετρο την κλάση HouseTable ή την HouseChair και στη συνέχεια θα την κάνω create και showmessage το description...

    Στην delphi αυτό π.χ. το πετύχαινα με class of HouseObjectBase παράμετρο...
    Πως θα το φτιάξω αυτό σε vb.net ?

    The Bible was written by the same people
    who said the Earth was flat.
  •  19-06-2008, 13:00 42980 σε απάντηση της 42978

    Απ: Base class type παράμετρο σε sub

    Για το σκοπό αυτό υπάρχουν τα 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
  •  20-06-2008, 11:12 43008 σε απάντηση της 42980

    Απ: Base class type παράμετρο σε sub

    Θεός!!!
    Ακριβώς αυτό που έψαχνα.

    Είχα καταλήξει να χρησιμοποιήσω παράμετρο type και μετά instantiation μέσω του Activator.CreateInstance αλλα αυτός ο τρόπος είχε πολλά μειονεκτήματα.

    Ευχαριστώ.

    The Bible was written by the same people
    who said the Earth was flat.
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems