Demonstra Passo a passo: Criação de um componente com o Visual Basic
Componentes fornecem código reutilizável na forma de objetos.Um aplicativo que usa o código do componente, criando objetos e chamando seus métodos e propriedades, é conhecido sistema autônomo um cliente.Um cliente pode ou não ser no mesmo assembly sistema autônomo um componente usa.
Os procedimentos a seguir base entre si, portanto, a ordem em que você executa é importante.
Observação: |
---|
As caixas de diálogo e comandos de menu demonstradas podem ser diferentes daqueles descritas na Ajuda, dependendo das configurações ativas ou configurações de edição.Para alterar as configurações, escolher Importar e exportar configurações on the Ferramentas menu.Para obter mais informações, consulte Configurações do Visual Studio. |
Criando o projeto
Para criar a biblioteca de classes CDemoLib e o componente CDemo
From a Arquivo menu, selecionar Novo and then Projeto para em em aberto o Novo projeto da caixa de diálogo.selecionar o biblioteca de classes projeto modelo de lista de tipos de projeto do Visual Basic e digite CDemoLib in the Nome box.
Observação: Sempre especifique o nome de um novo projeto ao criá-la.Isso define o namespace raiz, o nome do assembly e o nome do projeto e também garante que o componente padrão no espaço para nome correto.
In O gerenciador de soluções, clicar com o botão direito do mouse em CDemoLib e selecionar 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 assemblies oferecem componentes chamados CDemo, você pode especificar seu CDemo usando o componente CDemoLib.CDemo.
fechar a caixa de diálogo.
From a Projeto menu, escolher Adicionar componente.No Adicionar novo item caixa de diálogo de de seleçãoClasse de componente and type CDemo.vb.no Nome box.Um componente chamado CDemo é adicionado à sua biblioteca de classes.
No O gerenciador de soluções, clicar no Mostrar todos os arquivos botão.Abra o CDemo.vb nó para mostrar o CDemo.Designer.vbarquivo .clicar com o botão direito do mouse em CDemo.Designer.vb e escolherExibir código no menu de atalho.O editor de códigos abre
Observe o Inherits System.ComponentModel.Component imediatamente abaixo Partial Public Class CDemo. Esta seção designa a classe da qual herda sua classe.Por padrão, um componente herda o Component classe fornecida pelo sistema. The Component classe fornece muitos recursos para seu componente, incluindo a capacidade de usar os designers.
localizar Public Sub New(). selecionar o corpo do método inteiro e recortá-lo do CDemo.Designer.vb arquivo pressionando CTRL-X.
No O gerenciador de soluções, clicar com o botão direito do mouse em CDemo.vb e escolherExibir código no menu de atalho.O editor de código se abre.
Colar a seleção no corpo do CDemo classe. Isso permite que você trabalhar no novo sem interferência do designer.
In O gerenciador de soluções, clicar com o botão direito do mouse em Class1.vb e escolherExcluir.Isso exclui a classe padrão que é fornecida com a biblioteca de classes, não será usado nesta explicação passo a passo.
From a Arquivo menu, escolher Salvar todos para salvar o projeto.
Adicionando construtores e finalizadores
Construtores de controle a maneira como o componente é inicializado; a Finalize método controla a maneira como ele tears para baixo. O código no construtor e o Finalize método para o CDemo classe mantém uma contagem de execução do número de CDemo objetos existência.
Para adicionar código para o construtor e finalizador da classe CDemo
No Editor de código, adicionar variáveis de membro para manter um em funcionamento total de instâncias do CDemo classe e um número de ID 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 ocorrências de CDemo que acessar esses membros usará os mesmos locais de memória. Membros compartilhados serão inicializados na primeira time o CDemo classe é chamado no código. Isso pode ser a primeira time um CDemo objeto é criado, ou o primeiro time um dos membros compartilhados é acessado.
localizar Public Sub New() e Public Sub New(Container As System.ComponentModel.IContainer), os construtores padrão para o CDemo classe. In Visual Basic, todos os construtores são nomeados New. O componente pode ter vários construtores com parâmetros diferentes, mas eles devem ter o nome de New.
Observação: O nível de acesso dos construtores determina quais 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 Componente Instancing Changes in Visual Basic.
Adicione o seguinte código para Sub New(), para incrementar a contagem de instância quando uma nova CDemo é criado e para conjunto o número de ID de instância.
Observação: Sempre adicione seu código após a telefonar para InitializeComponent.Neste ponto, quaisquer componentes constituintes foram inicializados.
InstanceID = NextInstanceID NextInstanceID += 1 ClassInstanceCount += 1
sistema autônomo a ReadOnly membro, InstanceID pode ser definida somente no construtor.
Observação: Usuários familiarizados com multithreading serão destaque bastante corretamente essa atribuição InstanceID e incrementando NextInstanceID deve ser uma operação atômica. Este e outros problemas relacionados ao threading são ilustrados no Demonstra Passo a passo: Criação de um componente Multithreaded Simple com o Visual Basic.
Adicione o seguinte método após o participante do construtor:
Protected Overrides Sub Finalize() ClassInstanceCount -= 1 End Sub
O Gerenciador de memória chama Finalize antes ele finalmente recupera a memória ocupada pela CDemo objeto. The Finalize método é gerado com Object, a raiz de todos os tipos de referência na hierarquia de classes do .NET. Substituindo Finalize, você pode executar limpeza apenas antes que o componente é removido da memória. No entanto, sistema autônomo você verá posteriormente neste passo-a-passo, há mercadoria motivos para liberar recursos anteriormente.
Adicionando uma propriedade à classe
The CDemo classe possui apenas uma propriedade, uma propriedade compartilhada que permite que o cliente descobrir como muitos CDemo objetos há na memória, a qualquer momento. Métodos podem ser criados de forma semelhante.
Para criar uma propriedade para a classe CDemo
Adicione a seguinte declaração de propriedade para o CDemo classe, para permitir que os clientes recuperar o número de instâncias CDemo.
Public Shared ReadOnly Property InstanceCount() As Long Get Return ClassInstanceCount End Get End Property
Observação: Sintaxe de declaração de propriedade é diferente da que empregados em versões anteriores do Visual Basic.Para obter mais informações a mudança de sintaxe, consulte Alterações de procedimento de propriedade para usuários do Visual Basic 6.0.
Teste o componente
Para testar o componente, você precisa de um projeto que o utiliza.Este projeto deve ser o primeiro projeto que é iniciado quando você pressiona o Executar botão.
Para adicionar o projeto de cliente CDemoTest sistema autônomo o projeto de inicialização para a solução
From a Arquivo , aponte para Adicionar e escolherNovo projeto para em em aberto o Adicionar novo projeto caixa de diálogo.
selecionar o aplicativos do Windows modelo de projeto e do tipo CDemoTest in the Nome e, em seguida, clicar OK.
In O gerenciador de soluções, clicar com o botão direito do mouse em CDemoTest e clique em conjunto sistema autônomo projeto de inicialização no menu de atalho.
Para usar o CDemo componente, o projeto de teste do cliente deve ter uma referência para o projeto de biblioteca de classes. Depois de adicionar a referência, é uma mercadoria idéia para adicionar um Imports demonstrativo para o aplicativo de teste para simplificar o uso do componente.
Para adicionar uma referência para o projeto de biblioteca de classes
No O gerenciador de soluções, clicar no Mostrar todos os arquivos botão.clicar com o botão direito do mouse o Referências nó imediatamente abaixo CDemoTeste selecionar Adicionar referência no menu de atalho.
No Adicionar referência diálogo, selecionar o Projetos guia.
clicar duas vezes o CDemoLibprojeto de biblioteca de classes .CDemoLib aparecerá sob o Referências nó de a CDemoTestprojeto .
In O gerenciador de soluções, clicar com o botão direito do mouse em Form1.vb e selecionar Exibir código no menu de atalho.
Adicionar a referência de CDemoLib permite que você use o nome totalmente qualificado das CDemo componente — ou seja, CDemoLib.CDemo.
Para adicionar uma demonstrativo Imports
Adicione o seguinte Imports demonstrativo para a parte superior das Editor de código for Form1, acima da Class demonstrativo:
Imports CDemoLib
Adicionando o Imports demonstrativo permite que você omitir o nome da biblioteca e referir-se o tipo de componente sistema autônomo CDemo. Para obter mais informações sobre o Imports demonstrativo, consulte Namespaces in Visual Basic.
Agora será crie e use um programa de teste para testar seu componente.
Noções básicas sobre objeto tempo de vida
The CDemoTest programa irá ilustrar a tempo de vida de objeto na .NET Framework Criando e liberando o grande número de CDemo objetos.
Para adicionar código para criar e liberar objetos CDemo
clicar Form1.vb [Design para retornar ao designer.
arrastar um Button e um Timer do Todos os Windows Forms Guia de do Caixa de ferramentas onto the Form1 área de design.
O não visuais Timer componente aparece em uma área de design separadas abaixo do formulário.
clicar duas vezes no ícone de Timer1 Para criar um método de manipulação de eventos para o componente de Timer1 Tick evento. Coloque o código a seguir no evento-método de manipulação.
Me.Text = "CDemo instances: " & CDemo.InstanceCount
Em cada tique do timer, a legenda do formulário exibirá a contagem corrente de instância para o CDemo classe. O nome de classe é usado sistema autônomo um qualificador para o compartilhada InstanceCount propriedade — não é necessário criar uma instância de CDemo para acessar um membro compartilhado.
clicar no Form1.vb [Design guia para retornar ao designer.
clicar com o botão direito do mouse em Timer1 e selecionar Propriedades no menu de atalho.No Propriedades janela, defina o valor de seus Enabled propriedade para True. Isso irá iniciar o timer assim que o formulário é criado.
clicar duas vezes o Button em Form1, para criar um método de tratamento de evento do botão Click evento. Coloque o código a seguir no evento-método de 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ê.sistema autônomo 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, mesmo que instância será lançada, porque a variável cd irá fora do escopo.
sistema autônomo você pode ter adivinhado já, sistema autônomo coisas não acontecerá muito dessa maneira.
Para executar e depurar projetos CDemoTest e CDemo
Pressione F5 para iniciar a solução.
O projeto de cliente for iniciado e Form1 será exibida. Observe que a legenda do formulário exibe "CDemo instâncias: 0".
Clique no botão.A legenda do formulário deve exibir "CDemo instâncias: 1000".
As instâncias de CDemo foram que todos liberados pelo time do botão Click procedimento de tratamento de evento concluído. Por que eles ainda não tiver sido finalizados?Em resumo, o Gerenciador de memória finaliza objetos em segundo plano, com prioridade baixa.A prioridade será aumentada apenas em se o sistema ficar pouco memória.Este lenta lixo coleção esquema permite a alocação do objeto muito rápida.
clicar no botão mais várias vezes, observando a legenda.Em algum momento, o número de instâncias de repente descartará.Isso significa que o Gerenciador de memória foi recuperada a memória de alguns dos objetos.
Observação: Caso tenha clicado em mais de 10 vezes e o número de CDemo instâncias diminuiu, talvez seja necessário ajustar o código para que ela usa mais memória. fechar o formulário para retornar para o ambiente de desenvolvimento e aumentar o número de iterações no For loop para 10000. Em seguida, execute novamente o projeto.
Repetir a etapa 3.Você obterá bem isso time antes da memória Gerenciador finaliza mais objetos.
Na verdade, sempre que você Repetir a etapa 3, você provavelmente poderá alocar mais CDemo objetos antes das etapas do Gerenciador de memória. Isso ocorre porque mais e mais de Visual Studio trocado, deixando mais espaço para instâncias de CDemo.
fechar o formulário para retornar para o ambiente de desenvolvimento.