Compartilhar via


Passo a passo: Criando um componente com Visual Basic

Componentes fornecem código reutilizável na forma de objetos.Um aplicativo que usa o código do componente, criação de objetos e chamando seus métodos e propriedades, é conhecido como um cliente.Um cliente pode ou não estar no mesmo assembly que um componente que ele usa.

Os passos a seguir são incrementais, dependentes, então a ordem de execução é importante.

ObservaçãoObservação

As caixas de diálogo e comandos de menu demonstradas podem ser diferentes daqueles descritos na Ajuda, dependendo das configurações ativas ou configurações de edição.Para alterar as configurações, escolha Import and Export Settings sobre o Ferramentas menu.Para obter mais informações, consulte Configurações de Visual Studio.

Criando o projeto

Para criar a biblioteca de classes CDemoLib e o componente de CDemo

  1. Do arquivo menu, selecione New e, em seguida projeto para abrir o Novo projeto caixa de diálogo.Selecione o Biblioteca de classe modelo da lista de tipos de projeto de Visual Basic de projeto e, em seguida, digite CDemoLib na nome caixa.

    ObservaçãoObservação

    Sempre especifique o nome de um novo projeto ao criá-la.Isso define o namespace raiz, o nome de assembly e o nome do projeto e também garante que o componente padrão será no namespace correto.

  2. Em Solution Explorer, com o botão direito CDemoLib e selecione Propriedades no menu de atalho.Observe que o namespace raiz caixa contém CDemoLib.

    O namespace principal é usado para qualificar os nomes dos componentes no conjunto de módulos (assembly).Por exemplo, se dois assemblys fornecem componentes chamados CDemo, você pode especificar o CDemo usando o componente CDemoLib.CDemo.

    Feche a caixa de diálogo.

  3. Do projeto menu, escolha Add Component.No Add New Item caixa de diálogo, selecione A classe de componente e o tipo de CDemo.vb.no nome caixa.Um componente chamado CDemo é adicionado à sua biblioteca de classe.

  4. No Solution Explorer, clique no Mostrar todos os arquivos botão.Abrir o CDemo.vb o nó para mostrar o CDemo.Designer.vb arquivo.Com o botão direito CDemo.Designer.vb e escolha Exibir código no menu de atalho.O code editor abre

  5. Observe o Inherits System.ComponentModel.Component imediatamente abaixo Partial Public Class CDemo.Esta seção designa a classe da qual sua classe herda.Por padrão, um componente herda a Component classe fornecida pelo sistema.O Component classe fornece muitos recursos para seu componente, incluindo a capacidade de usar designers.

  6. Locate Public Sub New().Selecione o corpo do método inteiro e recortá-lo a partir do CDemo.Designer.vb arquivo pressionando CTRL-X.

  7. No Solution Explorer, com o botão direito CDemo.vb e escolha Exibir código no menu de atalho.O editor de código é aberto.

  8. Colar a seleção no corpo da CDemo classe.Isso permite trabalhar em New sem interferência do designer.

  9. Em Solution Explorer, com o botão direito Class1. vb e escolha Excluir.Isso exclui a classe padrão que é fornecida com a biblioteca de classes, pois ele não será usado nesta explicação.

  10. Do arquivo menu, escolha Salvar tudo para salvar o projeto.

A adição de construtores e finalizadores

Construtores de controlam a maneira como o seu componente é inicializado; o Finalize método controla a forma que ele destrói.O código no construtor e o Finalize método da CDemo classe mantém uma execução da contagem do número de CDemo objetos na existência.

Para adicionar código para o construtor e o finalizador da classe CDemo

  1. No Editor de código, adicione variáveis de membros para manter um em funcionamento total de instâncias da CDemo classe e um número de identificação para cada instância.

    Public ReadOnly InstanceID As Integer
    Private Shared NextInstanceID As Integer = 0
    Private Shared ClassInstanceCount As Long = 0
    

    Porque o InstanceCount e NextInstanceID variáveis de membro são declaradas Shared, eles existem somente no nível de classe.Todas as instâncias de CDemo que acessam tais membros usará os mesmos locais de memória.Membros compartilhados serão inicializados pela primeira vez o CDemo classe é chamada no código.Isso poderia ser a primeira vez um CDemo objeto é criado, ou na primeira vez que um dos membros compartilhados é acessada.

  2. Localize Public Sub New() e Public Sub New(Container As System.ComponentModel.IContainer), os construtores padrão para o CDemo classe.Na Visual Basic, todos os construtores são nomeados New.O componente pode ter vários construtores com parâmetros diferentes, mas todos devem ter o nome New.

    ObservaçãoObservação

    O nível de acesso dos construtores determina o que os clientes poderão criar instâncias da classe.Em outras versões do Visual Basic, a criação do objeto foi controlada pela Instancing propriedade; Se você já usou o Instancing propriedade, você talvez ache útil ler Alterações de instâncias de componente no Visual Basic.

  3. Adicione o seguinte código para Sub New(), para incrementar a contagem de instância quando uma nova CDemo é criado e para definir o número de identificação de instância.

    ObservaçãoObservação

    Sempre adicione seu código após a chamada para InitializeComponent.Nesse ponto, todos os componentes constituintes foram inicializados.

    InstanceID = NextInstanceID
    NextInstanceID += 1
    ClassInstanceCount += 1
    

    Como um ReadOnly membro, InstanceID pode ser definida somente no construtor.

    ObservaçãoObservação

    Usuários familiarizados com multithreading serão destaque bastante corretamente essa atribuição de InstanceID e incrementar NextInstanceID deve ser uma operação atômica.Esse e outros problemas relacionados ao threading são ilustrados na Passo a passo: Criando um componente com simples com Visual Basic.

  4. Adicione o seguinte método após o término do construtor:

    Protected Overrides Sub Finalize()
       ClassInstanceCount -= 1
       End Sub
    

    As chamadas de Gerenciador de memória Finalize antes ele finalmente recupera a memória ocupada pela CDemo objeto.O Finalize método é gerado com Object, a raiz de todos os tipos de referência do.Hierarquia de classe NET.Substituindo Finalize, você pode executar a limpeza antes de seu componente é removido da memória.No entanto, como você verá posteriormente nesta explicação passo a passo, há bons motivos para liberar recursos anteriormente.

A adição de uma propriedade à classe

O CDemo classe possui apenas uma propriedade, uma propriedade compartilhada que permite que o cliente descobrir como muitos CDemo objetos existem na memória em um determinado momento.Métodos podem ser criados de maneira semelhante.

Para criar uma propriedade para a classe CDemo

  • Adicione a seguinte declaração de propriedade para o CDemo classe, para permitir que clientes recuperar o número de instâncias de CDemo.

    Public Shared ReadOnly Property InstanceCount() As Long
       Get
          Return ClassInstanceCount
       End Get
    End Property
    
    ObservaçãoObservação

    Sintaxe de declaração de propriedade é diferente da que é empregado em versões anteriores do Visual Basic.Para mais informações sobre a alteração de sintaxe, consulte Property Procedure Changes for Visual Basic 6.0 Users.

O componente de teste.

Para testar o componente, você precisa de um projeto que o utiliza.Este projeto deve ser o primeiro projeto que começa quando você pressiona o Executar botão.

Para adicionar o projeto de cliente CDemoTest como o projeto de inicialização para a solução

  1. Do arquivo , aponte para Add e escolha Novo projeto para abrir o Add New Project caixa de diálogo.

  2. Selecione o Windows Application modelo de projeto e o tipo de CDemoTest na nome caixa e, em seguida, clique em OK.

  3. Em Solution Explorer, com o botão direito CDemoTest e clique em Set as Startup Project no menu de atalho.

    Para usar o CDemo componente, o projeto de teste do cliente deve ter uma referência ao projeto de biblioteca de classe.Depois de adicionar a referência, é uma boa idéia para adicionar um Imports instrução para o aplicativo de teste para simplificar o uso do componente.

Para adicionar uma referência ao projeto de biblioteca de classe

  1. No Solution Explorer, clique no Mostrar todos os arquivos botão.Com o botão direito do referências nó imediatamente abaixo CDemoTeste selecione Add Reference no menu de atalho.

  2. No Add Reference caixa de diálogo, selecione o projetos guia.

  3. Clique duas vezes o CDemoLib o projeto de biblioteca de classes.CDemoLib será exibido sob o referências nó para o CDemoTest project.

  4. Em Solution Explorer, com o botão direito Form1. vb e selecione Exibir código no menu de atalho.

    Adicionar uma referência CDemoLib permite que você use o nome totalmente qualificado da CDemo componente — ou seja, CDemoLib.CDemo.

Para adicionar uma declaração Imports

  • Adicione o seguinte Imports instrução na parte superior do O Editor de código para Form1, acima do Class declaração:

    Imports CDemoLib
    

    Adicionando a Imports Then permite que você omita o nome da biblioteca e referir-se o tipo de componente, como CDemo.Para obter mais informações sobre o Imports instrução, consulte Namespaces no Visual Basic.

    Agora você criar e usar um programa de teste para testar o seu componente.

Noções básicas sobre o tempo de vida do objeto

O CDemoTest programa irá ilustrar a vida útil de objeto na .NET Framework , criando e liberando o grande número de CDemo objetos.

Para adicionar código para criar e liberar os objetos CDemo

  1. Clique em Form1.vb[Design para retornar para o designer.

  2. Arrastar um Button e um Timer da All Windows Forms guia da caixa de ferramentas até o Form1 superfície de design.

    O nonvisual Timer componente aparece em uma superfície de design separados abaixo do formulário.

  3. Clique duas vezes no ícone do Timer1 para criar um método de manipulação de eventos para o componente de Timer1 Tick evento.Coloque o seguinte código no método de manipulação de eventos.

    Me.Text = "CDemo instances: " & CDemo.InstanceCount
    

    Em cada tique do timer, a legenda do formulário exibirá a contagem atual de instância para o CDemo classe.O nome da classe é usado como um qualificador para compartilhado InstanceCount propriedade — não é necessário criar uma instância de CDemo para acessar um membro compartilhado.

  4. Clique no Form1. vb [Design tab para retornar ao designer.

  5. Com o botão direito Timer1 e selecione Propriedades no menu de atalho.No Propriedades janela, defina o valor de suas Enabled propriedade para True.Isso irá iniciar o cronômetro, assim que o formulário é criado.

  6. Clique duas vezes o Button na Form1, para criar um método de manipulação de eventos para o botão Click evento.Coloque o seguinte código no método de manipulação de eventos.

    Dim cd As CDemo
    Dim ct As Integer
    For ct = 1 To 1000
       cd = New CDemo
    Next
    

    Esse código pode parecer estranho para você.Como cada instância de CDemo é criado, a instância anterior seja liberada.Quando o For loop é feita, haverá somente uma instância de CDemo esquerda.Quando o método de manipulação de eventos é encerrado, até mesmo essa instância será lançada, porque a variável cd sairá do escopo.

    Como você pode ter adivinhado já, as coisas não acontecerá muito dessa maneira.

Para executar e depurar projetos CDemoTest e CDemo

  1. Pressione F5 para iniciar a solução.

    O projeto de cliente for iniciado, e Form1 será exibido.Observe que a legenda do formulário exibe "instâncias de CDemo: 0".

  2. Clique no botão.A legenda do formulário deve exibir "instâncias de CDemo: 1000".

    As instâncias do CDemo foram todos liberados pelo tempo do botão Click o procedimento de tratamento de evento concluído.Por que eles ainda não foi finalizados?Em resumo, o Gerenciador de memória finaliza objetos em segundo plano, com baixa prioridade.A prioridade será aumentada apenas em, se o sistema ficar com pouco memória.Isso preguiçoso esquema de coleta de lixo permite a alocação de objeto muito rápido.

  3. Clique no botão mais várias vezes, observando a legenda.Em algum momento, o número de instâncias repentinamente cairá.Isso significa que o Gerenciador de memória tem reclamado a memória de alguns dos objetos.

    ObservaçãoObservação

    Se você clicou em mais de 10 vezes e o número de CDemo instâncias não diminuiu, talvez seja necessário ajustar o código para que ela usa mais memória.Feche o formulário para retornar ao ambiente de desenvolvimento e aumentar o número de iterações, o For loop para 10000.Em seguida, execute novamente o projeto.

  4. Repita a etapa 3.Você obterá futuramente neste momento, antes do Gerenciador de memória finaliza mais objetos.

    Na verdade, sempre que você Repita a etapa 3, você provavelmente será capaz de alocar mais CDemo antes de executar etapas no Gerenciador de memória de objetos.Isso ocorre porque mais de Visual Studio é trocada, deixando mais espaço para instâncias de CDemo.

  5. Feche o formulário para retornar ao ambiente de desenvolvimento.

Consulte também

Outros recursos

Programação com componentes

Passo a passo de criação do componente