Compartilhar via


Design do construtor

Observação

Esse conteúdo é reimpresso por permissão da Pearson Education, Inc. das Diretrizes de Design da Estrutura: Convenções, Idiomas e Padrões para Bibliotecas .NET Reutilizáveis, 2ª Edição. Essa edição foi publicada em 2008, e desde então o livro foi totalmente revisado na terceira edição. Algumas das informações nesta página podem estar desatualizadas.

Há dois tipos de construtores: construtores de tipo e construtores de instância.

Construtores de tipo são estáticos e são executados pelo CLR antes que o tipo seja usado. Os construtores de instância são executados quando uma instância de um tipo é criada.

Construtores de tipo não podem usar parâmetros. Os construtores de instância podem. Construtores de instância que não tomam parâmetros geralmente são chamados de construtores sem parâmetros.

Construtores são a maneira mais natural de criar instâncias de um tipo. A maioria dos desenvolvedores pesquisará e tentará usar um construtor antes de considerar formas alternativas de criar instâncias (como métodos de fábrica).

✔️ CONSIDERE fornecer construtores simples, idealmente padrão.

Um construtor simples tem um número muito pequeno de parâmetros e todos os parâmetros são primitivos ou enumerações. Esses construtores simples aumentam a usabilidade da estrutura.

✔️ CONSIDERE o uso de um método de fábrica estático em vez de um construtor se a semântica da operação desejada não for mapeada diretamente para a construção de uma nova instância ou se seguir as diretrizes de design do construtor não parecer natural.

✔️ USE parâmetros de construtor como atalhos para definir as propriedades principais.

Não deve haver diferença na semântica entre usar o construtor vazio seguido por alguns conjuntos de propriedades e usar um construtor com vários argumentos.

✔️ USE o mesmo nome para parâmetros de construtor e uma propriedade se os parâmetros do construtor forem usados para simplesmente definir a propriedade.

A única diferença entre esses parâmetros e as propriedades deve ser o uso de maiúsculas e minúsculas.

✔️ FAÇA um trabalho mínimo no construtor.

Os construtores não devem fazer muito trabalho além de capturar os parâmetros do construtor. O custo de qualquer outro processamento deve ser adiado até que seja necessário.

✔️ GERE exceções de construtores de instância, se apropriado.

✔️ DECLARE explicitamente o construtor público sem parâmetros em classes, se esse construtor for necessário.

Se você não declarar explicitamente nenhum construtor em um tipo, muitos idiomas (como C#) adicionarão automaticamente um construtor público sem parâmetros. (Classes abstratas obtêm um construtor protegido.)

Adicionar um construtor parametrizado a uma classe impede que o compilador adicione o construtor sem parâmetros. Isso geralmente causa alterações interruptivas acidentais.

❌ EVITE definir explicitamente construtores sem parâmetros em structs.

Isso torna a criação de matriz mais rápida, pois se o construtor sem parâmetros não estiver definido, ele não precisará ser executado em todos os slots da matriz. Observe que muitos compiladores, incluindo C#, não permitem que structs tenham construtores sem parâmetros por esse motivo.

❌ EVITE chamar membros virtuais em um objeto dentro de seu construtor.

Chamar um membro virtual fará com que a substituição mais derivada seja chamada, mesmo que o construtor do tipo mais derivado ainda não tenha sido totalmente executado.

Diretrizes do construtor de tipo

✔️ TORNE os construtores estáticos privados.

Um construtor estático, também chamado de construtor de classe, é usado para inicializar um tipo. O CLR chama o construtor estático antes que a primeira instância do tipo seja criada ou todos os membros estáticos nesse tipo sejam chamados. O usuário não tem controle sobre quando o construtor estático é chamado. Se um construtor estático não for privado, ele poderá ser chamado por código diferente do CLR. Dependendo das operações executadas no construtor, isso pode causar um comportamento inesperado. O compilador C# força os construtores estáticos a serem privados.

❌ NÃO lance exceções de construtores estáticos.

Se uma exceção for gerada de um construtor de tipo, o tipo não será utilizável no domínio do aplicativo atual.

✔️ CONSIDERE inicializar campos estáticos embutidos em vez de usar explicitamente construtores estáticos, pois o runtime é capaz de otimizar o desempenho de tipos que não têm um construtor estático definido explicitamente.

Partes © 2005, 2009 Microsoft Corporation. Todos os direitos reservados.

Reimpresso por permissão da Pearson Education, Inc. de Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition de Krzysztof Cwalina e Brad Abrams, publicado em 22 de outubro de 2008 pela Addison-Wesley Professional como parte da série Microsoft Windows Development Series.

Consulte também