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

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 Biblioteca de classe modelo deprojetoda lista de Visual C#tipos deprojeto e digite CDemoLib no 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 Padrão 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.

  4. No Adicionar Novo Item caixa de diálogo, selecione Classe de componente e digite CDemo.cs no Nome caixa. Clique em Adicionar para criar o componente.

    Um componente chamado CDemo é adicionado à suabibliotecade classe.

  5. No Solution Explorer, direito clique em- CDemo.cs e escolha Exibir Código nomenude atalho. O code editor abre.

    Observe o : Component imediatamente após a public partial 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. Em Solution Explorer, direito clique em- Class1. cs e escolha Excluir. Isso exclui padrão classe é fornecido com a classedebiblioteca, ele não será usado nesta explicação.

  7. Do Arquivo menu, escolha Salvar Tudo para salvar o projeto.

A adição de construtores e destrutores

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 destruidor 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 int InstanceID;
    private static int NextInstanceID = 0;
    private static long ClassInstanceCount = 0;
    

    Porque o InstanceCount e NextInstanceID variáveis de membro são declaradas static, 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 estáticos 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 estático é acessada.

  2. Localize public CDemo() e public CDemo(IContainer container), os construtores padrão para o CDemo classe. Em Visual C#, todos os construtores têm o mesmo nome da classe. O componente pode ter vários construtores, com parâmetros diferentes, mas todos devem ter o mesmo nome de seu componente.

    ObservaçãoObservação

    O nível de acesso dos construtores determina quais clientes poderão criar instâncias da classe.

  3. Adicionar o seguinte código para public CDemo(), 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 ++;
    ClassInstanceCount ++;
    

    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 C#.

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

    ~CDemo()
    {
       ClassInstanceCount --;
    }
    

    Este método é chamado um destruidore é representado pelo caractere de til (~) na frente do nome da classe . O Gerenciador de memória chama o destruidor antes de finalmente recupera a memória ocupada pela CDemo objeto. Implementando um destruidor de 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 CDemoclasse possui apenas uma propriedade, umapropriedade estáticoque 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 static long InstanceCount
       {
          get
          {
             return ClassInstanceCount;
          }
       }
    

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 usingdedemonstrativo para testeaplicativo para simplificar o uso do componente.

Para adicionar uma referência para oprojetodebibliotecade classe

  1. Em Solution Explorer, à direita clique de-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. Em Solution Explorer, à direita clique de- Form1 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 um usando demonstrativo

  • Adicionar o seguinte usingademonstrativo à lista de using instruções na parte superior da o Editor deCódigo para Form1.

    using CDemoLib;
    

    Adicionando o using demonstrativo permite que você omita o nome da biblioteca e consulte o tipo de componente , como CDemo.

    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 CDemoTestprograma irá ilustrar atempo de vida do objetona.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.cs[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.

    this.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 o estático InstanceCount propriedade — não é necessário para criar uma instância de CDemo para acessar um membro estático .

  4. Localize o construtor para Form1 (public Form1()) e adicione o seguinte código após a chamada para InitializeComponent().

    timer1.Enabled = true;
    

    Isso irá iniciar o cronômetro, assim que o formulário é criado.

  5. Clique o Form1. cs [Design tab para retornar ao designer.

  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.

    CDemo cd;
    int ct;
    for (ct = 0; ct < 1000; ct++)
       cd = new CDemo();
    

    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 e 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