Condividi tramite


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

Nomi o 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 delle impostazioni di sviluppo in Visual Studio.

Per compilare l'oggetto COM utilizzato in questa procedura dettagliata

  1. In Visual Basic 6.0 aprire un nuovo progetto DLL ActiveX. È stato creato un progetto denominato Project1 con una classe denominata Class1.

  2. 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.

  3. Nella scheda Generale della finestra di dialogo Proprietà progetto, modificare il nome del progetto digitando ComObject1 nel campo Nome progetto.

  4. In Esplora progetti fare clic con il pulsante destro del mouse su Class1, quindi scegliere Proprietà. Verrà visualizzata la finestra Proprietà relativa alla classe.

  5. Modificare la proprietà Name in MathFunctions.

  6. In Esplora progetti fare clic con il pulsante destro del mouse su MathFunctions, quindi scegliere Visualizza codice. Verrà visualizzato l'Editor di codice.

  7. Aggiungere una variabile locale per contenere il valore della proprietà.

    ' Local variable to hold property value
    Private mvarProp1 As Integer
    
  8. 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
    
  9. Aggiungere una funzione.

    Function AddNumbers( 
       ByVal SomeNumber As Integer, 
       ByVal AnotherNumber As Integer) As Integer
    
       AddNumbers = SomeNumber + AnotherNumber
    End Function
    
  10. 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

  1. Aprire un nuovo progetto Applicazione Windows di Visual Basic.

  2. Scegliere Aggiungi riferimento dal menu Progetto.

    Verrà visualizzata la finestra di dialogo Aggiungi riferimento.

  3. Nella scheda COM fare doppio clic su ComObject1 nell'elenco Nome componente, quindi scegliere OK.

  4. Scegliere Aggiungi nuovo elemento dal menu Progetto.

    Verrà visualizzata la finestra di dialogo Aggiungi nuovo elemento.

  5. 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.

  6. 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
    
  7. 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
    
  8. 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

  1. Aggiungere un pulsante al form di avvio, quindi fare doppio clic su di esso per visualizzarne il codice.

  2. 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)
    
  3. 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

Istruzione Inherits

Tipo di dati Short (Visual Basic)

Altre risorse

Interoperabilità COM nelle applicazioni .NET Framework (Visual Basic)