Procedura dettagliata: implementazione dell'ereditarietà con gli oggetti COM (Visual Basic)
È possibile derivare classi di Visual Basic da classi Public di oggetti COM, anche se creati con versioni precedenti di Visual Basic.È possibile eseguire l'override o l'overload di proprietà e metodi delle classi ereditate da oggetti COM con le stesse modalità utilizzate per le proprietà e i metodi di qualsiasi altra classe base.L'ereditarietà da oggetti COM è utile se si dispone di una libreria di classi esistente che non si desidera ricompilare.
Nella procedura descritta di seguito viene illustrato come creare in Visual Basic 6.0 un oggetto COM contenente una classe e in che modo utilizzarlo come classe base.
[!NOTA]
Nel computer in uso è possibile che vengano visualizzati nomi o percorsi diversi per alcuni elementi dell'interfaccia utente di Visual Studio nelle istruzioni seguenti. La versione di Visual Studio in uso e le impostazioni configurate determinano questi elementi. Per ulteriori informazioni vedere Impostazioni di Visual Studio.
Per compilare l'oggetto COM utilizzato in questa procedura dettagliata
In Visual Basic 6.0 aprire un nuovo progetto DLL ActiveX.È stato creato un progetto denominato Project1con una classe denominata Class1.
In Esplora progetti fare clic con il pulsante destro del mouse su Project1, quindi scegliere Proprietà Project1.Verrà 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, quindi scegliere Proprietà.Verrà visualizzata la finestra Proprietà relativa alla classe.
Modificare la proprietà Name in MathFunctions.
In Esplora progetti fare clic con il pulsante destro del mouse su MathFunctions, quindi scegliere Visualizza codice.Verrà 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 di proprietà Property Let e Property 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 scegliendo Crea ComObject1.dll dal menu File.
[!NOTA]
Sebbene sia anche possibile esporre una classe creata con Visual Basic come oggetto COM, non si tratta di un vero e proprio oggetto COM e non può essere utilizzato in questa procedura dettagliata.Per informazioni dettagliate, vedere Interoperabilità COM nelle applicazioni .NET Framework (Visual Basic).
Assembly di interoperabilità
Nella procedura riportata di seguito viene illustrato come creare un assembly di interoperabilità, che funge da ponte tra il codice non gestito, ad esempio un oggetto COM, e il codice gestito utilizzato da Visual Studio.L'assembly di interoperabilità creato in Visual Basic gestisce molti dei dettagli relativi all'utilizzo degli oggetti COM, ad esempio il marshalling di interoperabilità, ovvero il processo di inserimento dei parametri e dei valori restituiti in tipi di dati equivalenti durante lo spostamento da e in oggetti COM.Il riferimento nelle applicazioni Visual Basic punta all'assembly di interoperabilità e non all'oggetto COM vero e proprio.
Per utilizzare un oggetto COM con Visual Basic 2005 e versioni più recenti
Aprire un nuovo progetto Applicazione Windows di Visual Basic.
Scegliere Aggiungi riferimento dal menu Progetto.
Verrà visualizzata la finestra di dialogo Aggiungi riferimento.
Nella scheda COM fare doppio clic su ComObject1 nell'elenco Nome componente, quindi scegliere OK.
Scegliere Aggiungi nuovo elemento dal menu Progetto.
Verrà visualizzata la finestra di dialogo Aggiungi nuovo elemento.
Nel riquadro Modelli selezionare Classe.
Il nome file predefinito, Class1.vb, viene visualizzato nel campo Nome.Assegnare al campo il nome MathClass.vb e fare clic su Aggiungi.Verrà quindi creata una classe denominata MathClass e ne verrà visualizzato il codice.
Aggiungere all'inizio della classe MathClass il codice che segue 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 a MathClass il seguente codice:
' 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 a MathClass il seguente codice:
' 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 dell'oggetto COM, esegue l'overload di un metodo e definisce un nuovo metodo per estendere la classe.
Per testare della classe ereditata
Aggiungere un pulsante al form di avvio, quindi fare doppio clic su di esso per visualizzarne il codice.
Nella routine del gestore eventi Click del pulsante aggiungere il codice riportato di seguito per creare un'istanza di MathClass e chiamare i metodi di cui è stato eseguito l'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)
Premere F5 per eseguire il progetto.
Quando si fa clic sul pulsante nel form, viene chiamato il metodo AddNumbers con numeri del tipo di dati Short e viene scelto il metodo appropriato dalla classe base.La seconda chiamata a AddNumbers è diretta al metodo di overload da MathClass.La terza chiamata richiama il metodo SubtractNumbers, che estende la classe.Viene impostata la proprietà della classe base e viene visualizzato il valore.
Passaggi successivi
La funzione AddNumbers in overload sembra avere lo stesso tipo di dati del metodo ereditato dalla classe base dell'oggetto COM.I parametri e gli argomenti del metodo della classe base infatti sono definiti come Integer a 16 bit in Visual Basic 6.0, ma sono esposti come Integer a 16 bit di tipo Short nelle versioni successive di Visual Basic.La nuova funzione accetta Integer a 32 bit ed esegue l'overload della funzione di classe base.
Quando si utilizzano oggetti COM, è importante verificare le dimensioni e i tipi di dati dei parametri.Quando ad esempio si utilizza un oggetto COM che accetta un oggetto Collection di Visual Basic 6.0 come argomento, non è possibile fornire una raccolta da una versione successiva di Visual Basic.
È possibile eseguire l'override di proprietà e metodi ereditati da classi COM e questo significa che è possibile dichiarare una proprietà o metodo locale che sostituisce una proprietà o metodo ereditato da una classe COM base.Le regole per l'override di proprietà COM ereditate sono simili a quelle relative all'override di altre proprietà e metodi con le seguenti eccezioni:
Se si esegue l'override di proprietà o metodi ereditati da una classe COM, è necessario di eseguire l'override di tutti gli altri metodi e proprietà ereditati.
Non è possibile eseguire l'override di proprietà che utilizzano parametri ByRef.
Vedere anche
Riferimenti
Tipo di dati Short (Visual Basic)
Altre risorse
Interoperabilità COM nelle applicazioni .NET Framework (Visual Basic)