Condividi tramite


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.

Vedere anche

Altre risorse

Ereditarietà in Visual Basic

Interfacce in Visual Basic