C# - Conceitos : Construtor (revisitado)


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.

Abaixo temos a 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:

  1. Os construtores não retornam um valor, mesmo sem possuir a palavra-chave void. (Você recebe uma mensagem de erro se digitar void como parte do cabeçalho do construtor.)
  2. Os construtores usam o mesmo nome identificador que o nome da classe.

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

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:


José Carlos Macoratti