1º O papel do construtor padrão
Cada classe em C# é fornecida com um construtor padrão gratuito, que pode ser redefinido se for necessário. Por definição, um construtor padrão nunca aceita argumentos. Além de alocar o novo objeto na memoria, o construtor padrão garante que todos os dados de campos configurados, para um calor padrão adequado. Se não estiver satisfeito com estas atribuições padrão, pode redefinir o construtor padrão de acordo com suas necessidades. Para ilustrar veja a classe abaixo:
class Carro { public string Nome; public int VelocidadeCorrente; public Carro() { Nome = "GOLF GTI 1.8"; VelocidadeCorrente = "60"; } }
Neste caso estamos forçando todos os objetos Carro a começar sua vida com o nome “GOLF GTI 1.8”, com a velocidade corrente de 60 km. Assim consegue criar um objeto Carro configurado para os seguintes valores padrão:
static void Main(string[] args) { // Chamando o construtor padrao Carro CarroA = new Carro(); // Imprimi a velocidade corrente de 60 km/h Console.Write(CarroA.VelocidadeCorrente); }
2º Definindo construtores padrão
Tipicamente as classes definem construtores adicionais além do padrão. Ao fazer isso, você oferece ao usuário do objeto uma maneira simples e consistente para inicializar o estado de um objeto diretamente no momento da criação. Considere a seguinte atualização da classe “Carro” que agora ira suportar um total de três construtores de classe:
class Carro { public string Nome; public int VelocidadeCorrente; // Construtor padrao personalizado public Carro() { Nome = "GOLF GTI 1.8"; VelocidadeCorrente = "60"; } // Aqui a VelocidadeCorrente recebera por padrao (zero) public Carro(string vNome) { Nome = vNome; } // Deixar que o chamandor configure o 'estado' completo do objeto Carro public Carro(string vNome, string vVelocidadeCorrente) { Nome = vNome; VelocidadeCorrente = vVelocidadeCorrente; } }
Tenha em mente que o que diferencia um construtor do outro (aos olhos do compilador C#) é o numero e o tipo de argumentos do construtor. Portanto, o tipo “Carro” sobrecarregou o construtor para fornecer diversas maneiras de criar o objeto no momento da declaração. Seja qual for o caso, agora pode criar objetos “Carro” utilizando qualquer um dos construtores públicos. Por exemplo:
// Criar um carro Escort XR3 static void Main(string[] args) { Carro CarroA = new Carro("ESCORT XR3"); } // Criar um carro Escort XR3 com velocidade corrente de 90 km/h static void Main(string[] args) { Carro CarroA = new Carro("ESCORT XR3", "90"); }
3º Recusando o construtor padrão
No entanto, assim que define um construtor personalizado, o construtor padrão é silenciosamente removido da classe e não esta mais disponível! Pense desta forma: se não definir um construtor personalizado, o compilador C# fornecera um padrão para permitir que o usuário do objeto aloque uma instancia de seu tipo com dados de campo para valores padrão corretos. Entretanto quando define um construtor exclusivo, o compilador supõe que lidou com as coisas a sua maneira.
Portanto, se deseja permitir que o usuário do objeto, crie uma instancia de seu tipo com o construtor padrão, bem como seu construtor personalizado, você deve, explicitamente, redefinir o construtor padrão. Para isso, compreenda que uma grande maioria dos casos, a implementação do construtor padrão de uma classe é intencionalmente vazia, já que tudo o que precisa é a capacidade é criar um objeto com valores padrão. Considere a seguinte atualização da classe “Carro”:
class Carro { public int Intencidade; public void Aceleracao() { for (int i = 0; i <= Intencidade; i++) { Console.Write("Yahoooooo Haaaaaewwwwww"); } } // Recusar o construtor padrao public Carro() { } // Nosso construtor padrao agora! public Carro(int vIntencidade) { this.Intencidade = vIntencidade; } }
Bom, finalizando esse foi mais um post sobre Construtores de Classe em C# (Csharp), espero que tenham gostado, pois lendo ele parece ser uma coisa ate simples, mas no dia-a-dia de um desenvolvedor de sistemas, nos deparamos como modificar um objeto a nosso favor em fim.
Ate à próxima!