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

  1. In Visual Basic 6.0 aprire un nuovo progetto DLL ActiveX. Viene creato un progetto denominato Project1. Ha una classe denominata Class1.

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

  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 e quindi scegliere Proprietà . Viene visualizzata la finestra Proprietà per la classe.

  5. Modificare la proprietà Name in MathFunctions.

  6. In Esplora progetti fare clic con il pulsante destro del mouse su MathFunctions e quindi scegliere Visualizza codice . Viene 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 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
    
  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 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

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

  2. Scegliere Aggiungi riferimento dal menu Progetto.

    Viene visualizzata la finestra di dialogo Aggiungi riferimento.

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

  4. Dal menu Progetto fare clic su Aggiungi nuovo elemento.

    La finestra di dialogo Aggiungi nuovo elemento viene visualizzata.

  5. 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 denominata MathClass e ne viene visualizzato il codice.

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

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

  2. Nella routine del gestore eventi di Click del pulsante aggiungere il codice seguente per creare un'istanza di MathClass 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)
    
  3. 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.

Vedi anche