Abbiamo detto più volte che Visual Basic .NET è un linguaggio di programmazione orientato agli oggetti. Avendo bene in mente il concetto di classe, analizziamo le caratteristiche fondamentali di questo paradigma di programmazione: ereditarietà, polimorfismo ed overloading.
Si definisce ereditarietà la possibilità per una classe (detta classe derivata) di derivare da un'altra (la classe base), in modo tale che il tipo derivato possa utilizzare le variabili, i metodi, ecc. del tipo base. La parola chiave utilizzata per creare una relazione di eredità è Inherits; questa istruzione deve obbligatoriamente essere sulla prima riga di codice dopo la definizione della classe. Si consideri l'esempio seguente:
Public Class Persona
Protected sNome As String
Private iTelefono As Integer
'...
Public Property Nome() As String
Get
Return sNome
End Get
Set(ByVal Value As String)
sNome = Value
End Set
End Property
End Class
Public Class Impiegato
Inherits Persona
Private sMatricola As String
'...
Public Property Matricola() As String
Get
Return sMatricola
End Get
Set(ByVal Value As String)
sMatricola = Value
End Set
End Property
End Class
In questo stralcio di codice la classe Impiegato eredita dalla classe Persona: questo significa che nella classe Impiegato è possibile utilizzare tutto ciò che in Persona è stato definito come
Public, Protected o Friend, sia esso una variabile, una Sub, una Function o una Property. Ad esempio, all'interno di Impiegato è possibile utilizzare sia la variabile sNome sia la proprietà Nome, mentre la variabile iTelefono non è visibile.
Provando a dichiarare oggetti di tipo Persona e Impiegato, si ottiene quanto segue:
Dim Imp As New Impiegato()
Imp.Matricola = "389321" 'Corretto: Matricola è una property della classe impiegato.
Imp.Nome = "Marco" 'Corretto: Nome è una property che la classe Impiegato eredita da Persona.
Dim Pers As New Persona()
Pers.Nome() = "Marco" 'Corretto: Matricola è una property della classe Persona.
Pers.Matricola = "389321" 'Errato: la property Matricola non è visibile alla classe Persona.
Se ora commentiamo la riga Inherits Persona nella classe Impiegato, otterremo un messaggio di errore relativo all'istruzione Imp.Nome = "Marco", dal momento che abbiamo eliminato l'ereditarietà.