Procedura dettagliata: implementazione dell'ereditarietà con gli oggetti COM (Visual Basic)
È possibile derivare classi Visual Basic da classi Public
in oggetti COM, anche quelle create nelle versioni precedenti di Visual Basic. Le proprietà e i metodi delle classi ereditati da oggetti COM possono essere sottoposti a override o a overload come le proprietà, e i metodi di qualsiasi altra classe di base possono essere sottoposti a override o overload. L'ereditarietà dagli oggetti COM è utile quando si dispone di una libreria di classi esistente che non si desidera ricompilare.
Nella procedura seguente viene illustrato come utilizzare Visual Basic 6.0 per creare un oggetto COM contenente una classe e quindi usarlo come classe di base.
Nota
I nomi o i percorsi visualizzati per alcuni elementi dell'interfaccia utente di Visual Studio nelle istruzioni seguenti potrebbero essere diversi nel computer in uso. La versione di Visual Studio in uso e le impostazioni configurate determinano questi elementi. Per altre informazioni, vedere Personalizzazione dell'IDE.
Per compilare l'oggetto COM usato in questa procedura dettagliata
In Visual Basic 6.0 aprire un nuovo progetto DLL ActiveX. Viene creato un progetto denominato
Project1
. Ha una classe denominataClass1
.In Esplora progetti fare clic con il pulsante destro del mouse su Progetto1, quindi scegliere Proprietà Progetto1. Viene visualizzata la finestra di dialogo Proprietà progetto.
Nella scheda Generale della finestra di dialogo Proprietà Progetto modificare il nome del progetto digitando
ComObject1
nel campo Nome progetto.In Esplora progetti fare clic con il pulsante destro del mouse su
Class1
e quindi scegliere Proprietà . Viene visualizzata la finestra Proprietà per la classe.Modificare la proprietà
Name
inMathFunctions
.In Esplora progetti fare clic con il pulsante destro del mouse su
MathFunctions
e quindi scegliere Visualizza codice . Viene visualizzato l'editor di codice.Aggiungere una variabile locale per contenere il valore della proprietà:
' Local variable to hold property value Private mvarProp1 As Integer
Aggiungere le routine delle proprietà Proprietà
Let
e ProprietàGet
:Public Property Let Prop1(ByVal vData As Integer) 'Used when assigning a value to the property. mvarProp1 = vData End Property Public Property Get Prop1() As Integer 'Used when retrieving a property's value. Prop1 = mvarProp1 End Property
Aggiungere una funzione:
Function AddNumbers( ByVal SomeNumber As Integer, ByVal AnotherNumber As Integer) As Integer AddNumbers = SomeNumber + AnotherNumber End Function
Creare e registrare l'oggetto COM facendo clic su Crea ComObject1.dll dal menu File.
Nota
Sebbene sia anche possibile esporre una classe creata con Visual Basic come oggetto COM, non è un vero oggetto COM e non può essere utilizzata in questa procedura dettagliata. Per informazioni dettagliate, vedere interoperabilità COM nelle applicazioni .NET Framework.
Assembly di interoperabilità
Nella procedura seguente si creerà un assembly di interoperabilità che funge da ponte tra il codice non gestito (ad esempio un oggetto COM) e il codice gestito usato da Visual Studio. L'assembly di interoperabilità creato da Visual Basic gestisce molti dettagli dell'utilizzo di oggetti COM, ad esempio il marshalling di interoperabilità, il processo di creazione di pacchetti di parametri e la restituzione di valori in tipi di dati equivalenti durante lo spostamento da e verso oggetti COM. Il riferimento nell'applicazione Visual Basic punta all'assembly di interoperabilità, non all'oggetto COM effettivo.
Per utilizzare un oggetto COM con Visual Basic 2005 e versioni successive
Aprire un nuovo progetto Applicazione Windows in Visual Basic.
Scegliere Aggiungi riferimento dal menu Progetto.
Viene visualizzata la finestra di dialogo Aggiungi riferimento.
Nella scheda COM fare doppio clic su
ComObject1
nell'elenco Nome componente e fare clic su OK.Dal menu Progetto fare clic su Aggiungi nuovo elemento.
La finestra di dialogo Aggiungi nuovo elemento viene visualizzata.
Nel riquadro Modelli di fare clic su Classe.
Il nome file predefinito,
Class1.vb
, viene visualizzato nel campo Nome. Modificare questo campo in MathClass.vb e fare clic su Aggiungi. Verrà creata una classe denominataMathClass
e ne viene visualizzato il codice.Aggiungere il codice seguente riportato all'inizio di
MathClass
per ereditare dalla classe COM.' The inherited class is called MathFunctions in the base class, ' but the interop assembly appends the word Class to the name. Inherits ComObject1.MathFunctionsClass
Eseguire l'overload del metodo pubblico della classe base aggiungendo il codice seguente a
MathClass
:' This method overloads the method AddNumbers from the base class. Overloads Function AddNumbers( ByVal SomeNumber As Integer, ByVal AnotherNumber As Integer) As Integer Return SomeNumber + AnotherNumber End Function
Estendere la classe ereditata aggiungendo il codice seguente a
MathClass
:' The following function extends the inherited class. Function SubtractNumbers( ByVal SomeNumber As Integer, ByVal AnotherNumber As Integer) As Integer Return AnotherNumber - SomeNumber End Function
La nuova classe eredita le proprietà della classe base nell'oggetto COM, esegue l'overload di un metodo e definisce un nuovo metodo per estendere la classe.
Per testare la classe ereditata
Aggiungere un pulsante al modulo di avvio e quindi fare doppio clic su di esso per visualizzarne il codice.
Nella routine del gestore eventi di
Click
del pulsante aggiungere il codice seguente per creare un'istanza diMathClass
e chiamare i metodi di overload:Dim Result1 As Short Dim Result2 As Integer Dim Result3 As Integer Dim MathObject As New MathClass Result1 = MathObject.AddNumbers(4S, 2S) ' Add two Shorts. Result2 = MathObject.AddNumbers(4, 2) 'Add two Integers. Result3 = MathObject.SubtractNumbers(2, 4) ' Subtract 2 from 4. MathObject.Prop1 = 6 ' Set an inherited property. MsgBox("Calling the AddNumbers method in the base class " & "using Short type numbers 4 and 2 = " & Result1) MsgBox("Calling the overloaded AddNumbers method using " & "Integer type numbers 4 and 2 = " & Result2) MsgBox("Calling the SubtractNumbers method " & "subtracting 2 from 4 = " & Result3) MsgBox("The value of the inherited property is " & MathObject.Prop1)
Eseguire il progetto premendo F5.
Quando si fa clic sul pulsante nel modulo, il metodo AddNumbers
viene innanzitutto chiamato con numeri di tipo di dati Short
e Visual Basic sceglie il metodo appropriato dalla classe di base. La seconda chiamata a AddNumbers
viene indirizzata al metodo di overload da MathClass
. La terza chiamata chiama il metodo SubtractNumbers
, che estende la classe. La proprietà nella classe di base è impostata e il valore viene visualizzato.
Passaggi successivi
Si potrebbe notare che la funzione AddNumbers
di overload sembra avere lo stesso tipo di dati del metodo ereditato dalla classe base dell'oggetto COM. Questo perché gli argomenti e i parametri del metodo della classe base sono definiti come interi a 16 bit in Visual Basic 6.0, ma vengono esposti come numeri interi a 16 bit di tipo Short
nelle versioni successive di Visual Basic. La nuova funzione accetta interi a 32 bit ed esegue l'overload della funzione della classe di base.
Quando si usano oggetti COM, verificare le dimensioni e i tipi di dati dei parametri. Ad esempio, quando si utilizza un oggetto COM che accetta un oggetto insieme Visual Basic 6.0 come argomento, non è possibile fornire una raccolta da una versione successiva di Visual Basic.
Le proprietà e i metodi ereditati dalle classi COM possono essere sottoposti a override, ovvero è possibile dichiarare una proprietà o un metodo locale che sostituisce una proprietà o un metodo ereditato da una classe COM di base. Le regole per l'override delle proprietà COM ereditate sono simili alle regole per l'override di altre proprietà e metodi con le eccezioni seguenti:
Se si esegue l'override di qualsiasi proprietà o metodo ereditato da una classe COM, è necessario eseguire l'override di tutte le altre proprietà e metodi ereditati.
Non è possibile eseguire l'override delle proprietà che utilizzano parametri
ByRef
.