Instruções passo a passo: implementando a herança com objetos COM (Visual Basic)

Você pode derivar classes do Visual Basic de classes Public em objetos COM, mesmo aquelas criadas em versões anteriores do Visual Basic. As propriedades e os métodos de classes herdados 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á-la como uma classe base.

Observação

Seu computador pode mostrar diferentes nomes ou locais para alguns dos elementos de interface do usuário do Visual Studio nas instruções a seguir. A edição do Visual Studio que você possui 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 de DLL do ActiveX. Um projeto chamado Project1 é criado. Ele tem uma classe denominada Class1.

  2. No Explorador de Projeto, clique com o botão direito do mouse em Project1 e clique em Propriedades do Project1. 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 ao digitar ComObject1 no campo Nome do Projeto.

  4. No Explorador de Projeto, clique com o botão direito do mouse em Class1 e, em seguida, clique em Propriedades. A janela Propriedades para a classe é exibida.

  5. Altere a propriedade Name para MathFunctions.

  6. No Explorador de Projeto, clique com o botão direito do mouse em MathFunctions e, em seguida, clique em Exibir Código. O Editor de Código é exibido.

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

    ' Local variable to hold property value
    Private mvarProp1 As Integer
    
  8. Adicione os procedimentos de propriedade Property Let e Property Gets:

    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 Criar ComObject1.dll no menu Arquivo.

    Observação

    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 neste 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 código não gerenciado (como um objeto COM) e o código gerenciado que o Visual Studio usa. O assembly de interoperabilidade que o Visual Basic cria manipula muitos dos detalhes de trabalhar com objetos COM, como o agrupamento de interoperabilidade, o processo de empacotamento de parâmetros e os valores retornados 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 de aplicativo do Windows Visual Basic.

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

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

  3. Na guia COM, clique duas vezes em ComObject1 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 do arquivo padrão, Class1.vb, aparece no campo Nome. Altere esse campo para MathClass.vb e clique em Adicionar. Isso cria uma classe chamada MathClass e exibe seu código.

  6. Adicione o código a seguir à parte superior de 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 código a seguir 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 código a seguir 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
    

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 Click do botão, adicione o código a seguir para criar uma instância de MathClass e chamar os métodos sobrecarregados:

    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 método AddNumbers é chamado pela primeira vez com números de tipo de dados Short e o Visual Basic escolhe o método apropriado na classe base. A segunda chamada a AddNumbers é direcionada para o método de sobrecarga de MathClass. A terceira chamada chama o método SubtractNumbers, que estende a classe. A propriedade na classe base é definida e o valor é exibido.

Próximas etapas

Você deve ter notado que a função AddNumbers sobrecarregada 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 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, verifique o tamanho e os tipos de dados dos parâmetros. Por exemplo, quando você está usando um objeto COM que aceita um objeto de coleção do Visual Basic 6.0 como argumento, não é possível fornecer uma coleção de uma versão posterior do Visual Basic.

As propriedades e os métodos herdados de classes COM podem ser substituídos, o que significa que você pode declarar uma propriedade ou método local que substitui uma propriedade ou método herdado de uma classe COM base. As regras para substituir as 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 parâmetros ByRef não podem ser substituídas.

Confira também