Ereditarietà per gli utenti di Visual Basic 6.0
Aggiornamento: novembre 2007
L'ereditarietà consente di creare nuove classi a partire da classi preesistenti. L'ereditarietà può semplificare la progettazione dell'applicazione fornendo una struttura relazionale fra le varie classi. Inoltre consente di riutilizzare il codice. Infatti, solo per le funzionalità nuove o diverse delle classi occorre scrivere nuovo codice.
Ereditarietà di interfaccia
Visual Basic 6.0
In Visual Basic 6.0 è supportata l'ereditarietà di interfaccia, descritta in maggior dettaglio nella sezione Modifiche all'interfaccia per gli utenti di Visual Basic 6.0.
Visual Basic 2008
In Visual Basic 2008 l'ereditarietà di interfaccia è supportata mediante l'Istruzione Interface (Visual Basic) e l'Istruzione Implements. Per ulteriori informazioni sulle interfacce, vedere Interfacce in Visual Basic.
Ereditarietà dell'implementazione
Quando viene creata una nuova classe attraverso l'ereditarietà dell'implementazione, la nuova classe acquisisce automaticamente tutti i membri e l'implementazione della classe base. La classe preesistente è detta "classe base". La nuova classe invece è detta "classe derivata". È possibile aggiungere altri membri alla classe. Scrivendo del codice nella nuova classe è possibile modificare il funzionamento della classe base. Questa tecnica è chiamata override.
È possibile creare classi ereditando dalle classi create, dalle classi contenute nei riferimenti aggiunti a un progetto o dagli oggetti presenti in .NET Framework. Molte classi di .NET Framework sono correlate per ereditarietà. Ad esempio la classe TextBox eredita dalla classe System.Windows.Forms.TextBoxBase.
Visual Basic 6.0
In Visual Basic 6.0 non è previsto il supporto per l'ereditarietà dell'implementazione.
Visual Basic 2008
In Visual Basic 2008 l'ereditarietà si dichiara mediante l'istruzione Inherits. In questo esempio, la classe Oak deriva dalla classe base Tree.
Public Class Oak
Inherits Tree
' Add code here to extend or
' modify the behavior of the Tree class.
End Class
MustInherit e NotInheritable
Visual Basic 6.0
Nell'ereditarietà di interfaccia di Visual Basic 6.0 tutte le classi possono avere funzione di classe base di interfaccia. Non esiste alcuna regola sintattica che lo impedisca. Analogamente, non esiste alcuna regola sintattica che imponga che una classe agisca solo da classe base di interfaccia.
Visual Basic 2008
Oltre all'ereditarietà dell'implementazione, in Visual Basic 2008 sono definiti due modificatori di classe, ovvero MustInherit e NotInheritable. Questi modificatori consentono al programmatore di controllare le relazioni di ereditarietà di un'applicazione.
La presenza del modificatore MustInherit nella dichiarazione di una classe indica che essa non può essere istanziata.
Public MustInherit Class BaseClass
End Class
Ciò significa che l'istruzione BaseClass non può essere scritta dopo la parola chiave New. Solo le classi che ereditano da una classe BaseClass e che inoltre non presentano il modificatore MustInherit possono essere istanziate. Nella letteratura e nella programmazione orientata ad oggetti su altri linguaggi, una classe avente il modificatore MustInherit è detta classe astratta. Una classe che non presenti il modificatore MustInherit e che possa essere istanziata è detta classe concreta.
Un concetto correlato è la classe sealed, ovvero una classe che non può essere utilizzata come classe base. La presenza della parola chiave NotInheritable nella definizione di una classe indica lo stato riportato di seguito:
Public NotInheritable Class DerivedClass
End Class
Una classe con modificatore NotInheritable segna il limite di una gerarchia di ereditarietà.
Per ulteriori informazioni, vedere Ereditarietà in Visual Basic.
Suggerimenti per l'aggiornamento
Le classi che hanno funzione di interfaccia in Visual Basic 6.0 sono aggiornate in interfacce in Visual Basic 2008. Si consideri l'esempio di seguito riportato in cui si ha una classe base e una classe derivata di Visual Basic 6.0:
' Contents of class BaseClass
Public Sub BaseMethod()
End Sub
' Contents of class DerivedClass
Implements BaseClass
Private Sub BaseClass_BaseMethod()
End Sub
La procedura di aggiornamento guidato genera il codice aggiornato seguente:
Option Strict Off
Option Explicit On
Interface _BaseClass
Sub BaseMethod()
End Interface
Friend Class BaseClass
Implements _BaseClass
Public Sub BaseMethod() Implements _BaseClass.BaseMethod
End Sub
End Class
Friend Class DerivedClass
Implements _BaseClass
Private Sub BaseClass_BaseMethod() Implements _BaseClass.BaseMethod
End Sub
End Class
Utilizzando l'ereditarietà anziché le interfacce, il codice aggiornato può essere modificato nel modo seguente:
Friend Class BaseClass
Public Sub BaseMethod()
' Add code here to define BaseMethod.
End Sub
End Class
Friend Class DerivedClass
Inherits BaseClass
End Class
Ciò consente di eliminare un livello di riferimenti indiretti, ovvero _BaseClass. Inoltre, permette di eliminare una definizione di metodo, ovvero BaseClass_BaseMethod. Infatti tale metodo viene ereditato dalla classe base e non è necessario scrivere altro codice per definirlo. Se il programmatore desidera che la classe derivata presenti un funzionamento diverso, il metodo di base BaseMethod può essere sottoposto a override come mostrato di seguito:
Friend Class BaseClass
Public Overridable Sub BaseMethod()
' Add code here to define BaseMethod.
End Sub
End Class
Friend Class DerivedClass
Inherits BaseClass
Public Overrides Sub BaseMethod()
' Add code here to define behavior for DerivedClass.
End Sub
End Class
Alcune delle tecniche da considerare nelle interfacce aggiornate sono:
Sostituire le istruzioni Interface con le istruzioni Inherits.
Implementare la classe base come interfaccia, anziché come classe che implementa un'interfaccia. Per ulteriori informazioni, vedere Modifiche all'interfaccia per gli utenti di Visual Basic 6.0.
Implementare le classi base come classi con modificatore MustInherit.
Implementare le classi derivate come classi con modificatore NotInheritable.