JavascriptProva

mercoledì 29 agosto 2012

Definizione di una variabile del tipo base e sua istanziazione del tipo derivato

Mi annoto qui il metodo template che ho imparato a creare in VB.NET
Module Funzioni
    Sub popola(Of T As New)(ByVal frm As Form, ByVal sinistra As Integer, ByVal alto As Integer, ByVal numero As Integer)
        Dim ogg As Object
        For n = 1 To numero
            ogg = New T
            With ogg
                .left = sinistra
                .top = alto + .height * (n Mod numero)
                If ogg.GetType().Name = "casella" Then .backcolor = Color.Cyan
            End With
            frm.Controls.Add(ogg)
        Next
    End Sub
End Module
Bene. Ricordo una regola del C++, secondo la quale un puntatore si può definire di un tipo e si può istanziare di un tipo derivato... o qualcosa del genere.
Proviamo qualcosa del genere in VB.

Creo una classe casella che eredita da Label
Class casella
    Inherits Label
    Sub New()
        Text = "Ciao, ciccio"
        BorderStyle = Windows.Forms.BorderStyle.FixedSingle
    End Sub
End Class
Nel suo costruttore, questa classe inizializza il testo della casella e lo stile del bordo.
Quindi definisco la variabile come Label e la istanzio come casella
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Dim a As Label
        a = New casella
        Me.Controls.Add(a)

End Sub
E funziona. Ecco il risultato, in cui al form viene aggiunta una casella con le proprietà Text e BorderStyle inizializzate secondo le direttive del costruttore:



Dunque questa regola vale anche in vb.
Devo rivederla compiutamente in C++ perchè ne ho una reminiscenza un po' vaga...

Nessun commento:

Posta un commento