C#
- Conceitos : Construtor (revisitado) - I
![]() |
Hoje vamos rever um conceito muito importante na linguagem C#: O Construtor. |
![]() |
Os
construtores são tipos especiais de métodos usados para criar e
inicializar objetos.
É através deste tipo especial de método, chamado de construtor, que você
cria
instâncias de uma classe.
Assim, os construtores permitem que o programador crie objetos da classe e defina valores padrão, limite a instanciação e grave códigos flexíveis e fáceis de ler.
Construtores de Instância
Sempre que uma classe for instanciada usando a palavra new o seu construtor é chamado.
Quando você cria uma classe, um construtor é automaticamente criado para você se você não definir nenhum construtor. Este construtor é chamado de construtor padrão. Ele não tem nenhuma funcionalidade, além do fato de que ele pode ser usado para criar uma instância da classe.
Dessa forma se você não definir nenhum construtor para a classe, o C# vai criar um construtor padrão que instancia o objeto e define valores padrão para os membros da classe.
Conforme já vímos no artigo anterior, temos a seguir tabela com os valores definidos pelo construtor padrão para os tipos por valor:
Tipo de valor | Valor padrão |
---|---|
bool | false |
byte | 0 |
char | '\0' |
decimal | 0M |
double | 0,0D |
enum |
O valor produzido pela expressão (E)0, em que E é o identificador de enumeração. |
float | 0,0F |
int | 0 |
long | 0L |
sbyte | 0 |
short | 0 |
uint | 0 |
ulong | 0 |
ushort | 0 |
Obs: Os valores por referência como string são inicializados com o valor null;
Exemplo:
A seguir temos a definição de uma classe Produto. Definimos nesta classe 4 propriedades. Note que não definimos um construtor.
A seguir estamos criando uma instância da classe Produto usando a palavra new e em seguida estamos exibindo os valores das propriedades da classe:
![]() |
|
![]() |
Na figura ao lado vemos o resultado da execução do código.
Observe que as propriedades do tipo por valor como Codigo e Estoque foram inicializadas com o valor zero e as propriedades com tipo por referência como Nome e Descricao foram incializadas com o valor null.
Esse
trabalho foi feito pelo construtor padrão.
Os construtores diferem de outros métodos de duas maneiras:
Vamos então incluir um construtor na classe Produto:
Nenhum parâmetro está incluído com o construtor que criamos (assim como no construtor padrão). Ele não possui corpo, simplesmente definimos o nome Produto (igual ao nome da classe) e abrimos e fechamos as chaves({}).
Observe que um modificador de acesso public foi associado ao construtor para que outras classes possam instanciar objetos do seu tipo.
Os construtores podem ser marcados como public, private, protected, internal, protected internal ou private protected. Esses modificadores de acesso definem como os usuários da classe podem construir a classe.
Obs:
Você pode definir um construtor private ou
protected para realizar tarefas
especificas ou impedir que a classe seja instanciada.
Os construtores são métodos e, como outros métodos, eles podem ser
sobrecarregados. Podemos assim criar mais de um construtor em uma classe.
A seguir
criamos 3 construtores para a classe
Produto() que diferem no número de argumentos que
são usados para inicializar o objeto quando a classe for instanciada:
Dessa
forma para
adicionar funcionalidades completas às suas classes, você normalmente escreva
vários construtores para todas as classes nas quais os objetos serão
instanciados.
Quando você explicitamente escrever até mesmo um construtor para uma classe, você perde o construtor padrão que é criado automaticamente. Ao escrever seus construtores, pense como os objetos serão criados para esse tipo de classe.
No exemplo a seguir estamos criando objetos do tipo produto usando os 3 construtores criados:
![]() |
|
Acima vemos o resultado obtido para cada instância da classe Produto que foi criada e representada pelos objetos produto1, produto2 e produto3.
Se um construtor puder ser implementado como uma única instrução, você poderá usar uma definição de corpo de expressão(expression body definition) fornecendo uma implementação de um membro da classe de forma bastante concisa.
No exemplo, a definição de corpo da expressão atribui o argumento à propriedade Codigo da classe.
Para evitar duplicação de código um construtor poderá chamar outro construtor usado a palavra-chave this.
No exemplo a seguir criarmos o construtor que recebe os argumentos codigo e nome, e invocamos o construtor que usa apenas o codigo usando a palavra this :
Quando um construtor chama outro construtor, o construtor chamado será executado primeiro.
Quando definimos um campo (Field) em uma classe podemos iniciar o campo atribuindo um valor a ele ou não. Se você não atribuir um valor ao campo um valor padrão será atribuido quando você criar a instância da classe.
No código acima definimos o campo desconto com valor igual a 10.
A inicialização de um campo ocorre antes que o construtor seja executado e na ordem na qual foram declarados.
Revisamos assim alguns conceitos importantes sobre construtores na linguagem C#.
Na segunda parte do artigo vamos continuar o assunto.
Pegue o
código do projeto aqui:
CShp_Construtor1.zip
Deus nunca foi visto por alguém. O Filho
unigênito, que está no seio do Pai, esse o revelou.
João 1:18
Veja os
Destaques e novidades do SUPER DVD Visual Basic
: clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? |
Gostou ?
Compartilhe no Facebook
Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
C# - 10 dicas para otimizar o seu código - Aumente o desempenho e eficácia de sua aplicação C#
C# - Usando expressões lambdas para implementar delegates - III
C# - Criando e usando uma classe ou método Genérico - Macoratti