Demonstra Passo a passo: Criação de um componente com Visual Basic

Components provide reusable code in the form of objects. Um aplicativo que usa um componentedo código, pela criação de objetos e chamar seus métodos e propriedades, é conhecido como um cliente. A client may or may not be in the same assembly as a component it uses.

The following procedures build on each other, so the order in which you perform them is important.

ObservaçãoObservação

Caixas de diálogo e comandos de menu que você vê podem diferir das descritas na Help dependendo das suas configurações ativas ou edição. Para alterar as configurações, escolha Import and Export Settings sobre o Ferramentas menu. For more information, see Trabalhando com configurações.

Creating the Project

Para criar o CDemoLibbiblioteca de classee o componentede CDemo

  1. Da Arquivo menu, selecione Novo e projeto para em aberto o Novo projeto diálogo. Selecione o Class Library modelo deprojetoda lista de tipos de projeto Visual Basic e digite CDemoLib na Nome caixa.

    ObservaçãoObservação

    Sempre especifique o nome de um novo projeto ao criar -lo. Isso define onamespacede raiz, o nome de assembly e o nome do projeto e também garante que o componente do padrão será no namespacecorreto.

  2. Em Solution Explorer, direito clique em- CDemoLib e selecione Propriedades nomenude atalho. Observe que o Root namespace caixa contém CDemoLib.

    The root namespace is used to qualify the names of components in the assembly. Por exemplo, se dois assemblys fornecem componentes chamados CDemo, você pode especificar o CDemousando ocomponente CDemoLib.CDemo.

    Feche a caixa de diálogo.

  3. Do projeto menu, escolha Adicionar componente. No Adicionar Novo Item caixa de diálogo, selecione A classe de componente e digite CDemo.vb. no Nome caixa. Um componente chamado CDemo é adicionado à suabibliotecade classe.

  4. No Solution Explorer, clique no Mostrar Tudo arquivos de botão. Abrir o CDemo.vb o nó para mostrar o CDemo.Designer.vb arquivo. Botão direito- CDemo.Designer.vb e escolha Exibir Código nomenude 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 de Component classe fornecida pelo sistema. O deComponentclasse fornece muitos recursos para seu componente, incluindo a capacidade de designers.

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

  7. No Solution Explorer, à direita clique de- CDemo.vb e escolha Exibir Código nomenude atalho. O code editor abre.

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

  9. Em Solution Explorer, direito clique em- Class1. vb e escolha Excluir. Isso exclui padrão classe é fornecido com a classedebiblioteca, 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. OCódigo no construtor e o Finalizeométodo da CDemoclasse mantém a execução da contagem do número de CDemo objetos na existência.

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

  1. No o Editor deCódigo, adicionar variáveis de membro para manter uma execução total de instâncias da CDemoclassee 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 da classe . Tudo instâncias de CDemo que acessar esses membros usará o mesmo locais de memória . Membros compartilhados serão inicializados pela primeira vez o deCDemoclasse é chamado no código. Isso poderia ser a primeira vez um CDemodeobjeto é 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. Em 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ê usou o Instancingdepropriedade, talvez você ache útil ler Alterações na Visual Basic de instanciação de componente.

  3. Adicionar 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 que esteja familiarizado com multithreading destaque bastante corretamente essa atribuição de InstanceID e incrementar NextInstanceID deve ser uma operação atômica. Este e outros problemas relacionados ao threading são ilustrados na Demonstra Passo a passo: Criação de um componente Multithreaded simples com Visual Basic.

  4. Adicionar 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 recupera a memória ocupada por finalmente a 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 versão 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 que existem na memória em qualquer tempo determinado. Métodos podem ser criados de maneira semelhante.

Para criar uma propriedade para a classede CDemo

  • Adicionar a seguintedeclaração de propriedadepara o CDemoclasse, para permitir que os 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 daquela utilizada 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 teste 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 de CDemoTest como projeto de inicialização para a solução

  1. Do Arquivo menu, aponte para Adicionar e escolha Novo projeto para em aberto o Adicionarprojeto deNovo caixa de diálogo.

  2. Selecione o Windows Application modelodeprojetoe o tipo de CDemoTest na Nome caixa e, em seguida, clique em OK.

  3. Em Solution Explorer, direito clique em- CDemoTest e clique em Set as Inicialização Project nomenude atalho.

    Para usar o CDemodecomponente, o cliente testeprojeto deve ter uma referência aoprojetodebibliotecade classe. Após adicionar a referência, é uma boa idéia para adicionar um Importsdedemonstrativo para testeaplicativo para simplificar o uso do componente.

Para adicionar uma referência para oprojetodebibliotecade classe

  1. No Solution Explorer, clique no Mostrar Tudo arquivos de botão. Botão direito-a referências nó imediatamente abaixo CDemoTeste selecione Adicionar referência nomenude atalho.

  2. No Adicionar referência caixa de diálogo, selecione o projetos guia.

  3. Duplo clique de-a CDemoLibprojetodebibliotecadeclasse. CDemoLib aparecerá sob o referências o nó para o CDemoTest projeto.

  4. No Solution Explorer, direito clique em- Form1. vb e selecione Exibir Código nomenude atalho.

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

Para adicionar uma demonstrativode importações

  • Adicionar o seguinte Importsdedemonstrativo na parte superior da o Editor deCódigo para Form1, acima o Classdeclaração:

    Imports CDemoLib
    

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

    Você irá agora criar e usar um teste programa para teste seu componente.

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

O CDemoTestirá ilustrar atempo de vida do objetonoprograma de .NET Framework Criando e liberando o grande número de CDemo objetos.

Para adicionar código para criar e versão objetos de CDemo

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

  2. Arrastar uma Button e um Timer da Tudo Windows Forms guia da Toolbox até o Form1 superfície de design.

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

  3. -De duplo clique no ícone do Timer1 para criar um evento-Timer1 componentedo método de manipulação Tickevento. Coloque o seguinte código no evento- métodode manipulação.

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

    Em cada tique do timer, a legenda do formulárioexibirá 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 para criar uma instância de CDemo para acessar um membro compartilhado.

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

  5. Botão direito- Timer1 e selecione Propriedades nomenude atalho. No Propriedades janela, defina o valor de suas Enableddepropriedade para True. Isso irá iniciar o cronômetro, assim que o formulário é criado.

  6. Duplo clique de-a Button em Form1, para criar um evento-manipulação método para o botão Click evento. Coloque o seguinte código no evento- métodode manipulação.

    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 evento-sai do método de tratamento, mesmo que 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 o CDemoTest e projetos de CDemo

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

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

  2. Click the button. A legenda do formulário deve exibir "instâncias de CDemo: 1000".

    As instâncias de CDemo foram todos liberados pelo tempo do botão Click evento-conclusão do procedimento de tratamento. Por que eles ainda não foi finalizados? Em resumo, o Gerenciador de memória Finaliza a objetos no plano de fundo, com baixa prioridade. A prioridade só será aumentada se o sistema ficar com pouco memória. Isso preguiçoso esquema de coleção de lixo permite a alocação de objeto de muito rápida.

  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 foi recuperada 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 ele usa mais memória. Feche o formulário para retornar para o ambientede desenvolvimento e aumentar o número de iterações, o Foroloop para 10000. Em seguida, execute novamente o projeto .

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

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

  5. Feche o formulário para retornar para o ambientede desenvolvimento.

Consulte também

Outros recursos

Programando com Componentes

Passo a passo de criação do componente