Partilhar via


Passo a passo: Implementando herança com objetos COM (Visual Basic)

Você pode derivar classes do Visual Basic de Public classes em objetos COM, mesmo aqueles criados em versões anteriores do Visual Basic. As propriedades e métodos de classes herdadas de objetos COM podem ser substituídos ou sobrecarregados, assim como propriedades e métodos de qualquer outra classe base podem ser substituídos ou sobrecarregados. A herança de objetos COM é útil quando você tem uma biblioteca de classes existente que não deseja recompilar.

O procedimento a seguir mostra como usar o Visual Basic 6.0 para criar um objeto COM que contém uma classe e, em seguida, usá-lo como uma classe base.

Nota

Seu computador pode mostrar nomes ou locais diferentes para alguns dos elementos da interface do usuário do Visual Studio nas instruções a seguir. A edição do Visual Studio que você tem e as configurações que você usa determinam esses elementos. Para obter mais informações, consulte Personalizando o IDE.

Para criar o objeto COM usado neste passo a passo

  1. No Visual Basic 6.0, abra um novo projeto ActiveX DLL. Um projeto nomeado Project1 é criado. Tem uma classe chamada Class1.

  2. No Explorador de Projetos, clique com o botão direito do rato em Projeto1 e, em seguida, clique em Propriedades do Projeto1. A caixa de diálogo Propriedades do projeto é exibida.

  3. Na guia Geral da caixa de diálogo Propriedades do projeto, altere o nome do projeto digitando ComObject1 no campo Nome do projeto.

  4. No Explorador de Projetos, clique com o botão direito do rato eClass1, em seguida, clique em Propriedades. A janela Propriedades da classe é exibida.

  5. Altere a Name propriedade para MathFunctions.

  6. No Explorador de Projetos, clique com o botão direito do rato e, em MathFunctionsseguida, clique em Ver Código. O Editor de Códigos é exibido.

  7. Adicione uma variável local para manter o valor da propriedade:

    ' Local variable to hold property value
    Private mvarProp1 As Integer
    
  8. Adicionar procedimentos de propriedade de propriedade Let e propriedade 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. Adicione uma função:

    Function AddNumbers(
       ByVal SomeNumber As Integer,
       ByVal AnotherNumber As Integer) As Integer
    
       AddNumbers = SomeNumber + AnotherNumber
    End Function
    
  10. Crie e registre o objeto COM clicando em Fazer ComObject1.dll no menu Arquivo .

    Nota

    Embora você também possa expor uma classe criada com o Visual Basic como um objeto COM, ele não é um objeto COM verdadeiro e não pode ser usado nesta explicação passo a passo. Para obter detalhes, consulte Interoperabilidade COM em aplicativos .NET Framework.

Assemblies de interoperabilidade

No procedimento a seguir, você criará um assembly de interoperabilidade, que atua como uma ponte entre o código não gerenciado (como um objeto COM) e o código gerenciado usado pelo Visual Studio. O assembly de interoperabilidade que o Visual Basic cria lida com muitos dos detalhes do trabalho com objetos COM, como empacotamento de interoperabilidade, o processo de empacotamento de parâmetros e valores de retorno em tipos de dados equivalentes à medida que eles se movem de e para objetos COM. A referência no aplicativo Visual Basic aponta para o assembly de interoperabilidade, não o objeto COM real.

Para usar um objeto COM com o Visual Basic 2005 e versões posteriores

  1. Abra um novo projeto Visual Basic Windows Application.

  2. No menu Projeto, clique em Adicionar Referência.

    A caixa de diálogo Adicionar referência é exibida.

  3. Na guia COM, clique ComObject1 duas vezes na lista Nome do componente e clique em OK.

  4. No menu Projeto, clique em Adicionar Novo Item.

    A caixa de diálogo Adicionar Novo Item é exibida.

  5. No painel Modelos, clique em Classe.

    O nome de arquivo padrão, Class1.vb, aparece no campo Nome . Altere este campo para MathClass.vb e clique em Adicionar. Isso cria uma classe chamada MathClass, e exibe seu código.

  6. Adicione o seguinte código à parte superior do MathClass para herdar da 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. Sobrecarregue o método público da classe base adicionando o seguinte código 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. Estenda a classe herdada adicionando o seguinte código ao 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
    

A nova classe herda as propriedades da classe base no objeto COM, sobrecarrega um método e define um novo método para estender a classe.

Para testar a classe herdada

  1. Adicione um botão ao formulário de inicialização e clique duas vezes nele para exibir seu código.

  2. No procedimento do manipulador de eventos do botão, adicione o seguinte código para criar uma instância e MathClass chamar os métodos sobrecarregadosClick:

    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. Execute o projeto pressionando F5.

Quando você clica no botão no formulário, o AddNumbers método é chamado primeiro com Short números de tipo de dados e Visual Basic escolhe o método apropriado da classe base. A segunda chamada para AddNumbers é direcionada para o método de sobrecarga de MathClass. A terceira chamada chama o SubtractNumbers método, que estende a classe. A propriedade na classe base é definida e o valor é exibido.

Passos Seguintes

Você pode ter notado que a função sobrecarregada AddNumbers parece ter o mesmo tipo de dados que o método herdado da classe base do objeto COM. Isso ocorre porque os argumentos e parâmetros do método de classe base são definidos como inteiros de 16 bits no Visual Basic 6.0, mas eles são expostos como inteiros de 16 bits do tipo Short em versões posteriores do Visual Basic. A nova função aceita inteiros de 32 bits e sobrecarrega a função de classe base.

Ao trabalhar com objetos COM, certifique-se de verificar o tamanho e os tipos de dados dos parâmetros. Por exemplo, quando você estiver usando um objeto COM que aceita um objeto de coleção do Visual Basic 6.0 como um argumento, você não pode fornecer uma coleção de uma versão posterior do Visual Basic.

Propriedades e métodos herdados de classes COM podem ser substituídos, o que significa que você pode declarar uma propriedade local ou método que substitui uma propriedade ou método herdado de uma classe COM base. As regras para substituir propriedades COM herdadas são semelhantes às regras para substituir outras propriedades e métodos, com as seguintes exceções:

  • Se você substituir qualquer propriedade ou método herdado de uma classe COM, deverá substituir todas as outras propriedades e métodos herdados.

  • As propriedades que usam ByRef parâmetros não podem ser substituídas.

Consulte também