Condividi tramite


Procedura dettagliata: Implementazione dell'ereditarietà con oggetti COM (Visual Basic)

È possibile derivare classi Visual Basic da Public classi in oggetti COM, anche quelle create nelle versioni precedenti di Visual Basic. Le proprietà e i metodi delle classi ereditate da oggetti COM possono essere sovrascritti o sovraccaricati proprio come le proprietà e i metodi di qualsiasi altra classe di base. 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.

Annotazioni

Il computer potrebbe visualizzare nomi o percorsi diversi per alcuni degli elementi dell'interfaccia utente di Visual Studio nelle istruzioni seguenti. L'edizione di Visual Studio disponibile e le impostazioni usate determinano questi elementi. Per altre informazioni, vedere Personalizzazione dell'IDE.

Per costruire l'oggetto COM utilizzato in questo walkthrough

  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 Project1, quindi scegliere Proprietà progetto1. 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 Class1e 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 MathFunctionse quindi scegliere Visualizza codice. Viene visualizzato l'editor di codice .

  7. Aggiungi 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à 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 facendo clic su Crea ComObject1.dll dal menu File .

    Annotazioni

    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 Interop, non all'oggetto COM effettivo.

Per utilizzare un oggetto COM con Visual Basic 2005 e versioni successive

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

  2. Nel menu progetto fare clic su Aggiungi riferimento.

    Verrà visualizzata la finestra di dialogo Aggiungi riferimento .

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

  4. Nel menu Progetto , fare clic su Aggiungi Nuovo Elemento.

    Verrà visualizzata la finestra di dialogo Aggiungi nuovo elemento .

  5. Nel riquadro Modelli 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 MathClasse ne viene visualizzato il codice.

  6. Aggiungere il codice seguente 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 del pulsante Click, aggiungi il codice seguente per creare un'istanza di MathClass e chiamare i metodi sovraccaricati.

    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 AddNumbers metodo viene innanzitutto chiamato con Short numeri di tipo di dati 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 SubtractNumbers metodo , che estende la classe . La proprietà nella classe di base è impostata e il valore viene visualizzato.

Passaggi successivi

Potresti aver notato che la funzione sovraccaricata AddNumbers sembra avere lo stesso tipo di dato 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 di raccolta Visual Basic 6.0 come argomento, non è possibile fornire una raccolta da una versione più recente 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 ByRef parametri.

Vedere anche