Entendendo e utilizando construtores de classes em C# (CSharp)

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!

Deixe um comentário