Olá pessoal, neste artigo veremos mais alguns conceitos e criaremos um exemplo prático com Structs. Acompanhem:

Diferenças entre Classes e Structs – Apesar de serem muito parecidas sintaticamente, as classes e structs apresentam algumas diferenças, como descrito a seguir:

  • Uma estrutura não pode ser herdada de uma classe base, ao contrário de uma classe;
  • Em uma classe o compilador cria o construtor padrão no caso de não termos criado um construtor próprio. Já a estrutura não aceita a declaração de um construtor padrão, ou seja, um construtor que não tenha parâmetros. Isso porque o compilador sempre cria um construtor;
  • Usando estrutura não podemos inicializar campos de instância em seu ponto de declaração, o que é possível nas classes. Qualquer estrutura tem como regra inicializar todos os seus campos em todos os seus construtores;
  • A estrutura apresenta um construtor padrão (já mencionado anteriormente) criada pelo compilador, que sempre aplica os valores false, 0 ou null (dependendo do seu tipo) para os campos, como ocorre nas classes, mais os quais devemos tomar muito cuidado para que façam sentido e se comportem logicamente em relação ao valor da estrutura criado pelo construtor.

Falando especificamente da última diferença apresentada acima, podemos optar por não usar os valores padrões que o compilador atribui inicialmente. Neste caso, podemos criar um construtor que não é padrão se inicializarmos os campos com valores diferentes, considerando sempre que todos os campos em todos os construtores da estrutura devem ser inicializados de forma explícita, já que o compilador por si só não inicializará um campo no construtor.

Ok, chega de conceitos vamos à prática. Veja no código a seguir um exemplo do uso do Struct com datas, representando os campos dia, mês e ano:


    struct Data

    {

    int dia, mes, ano;



    public Data(int objDia, int objMes, int objAno)

    {

    this.dia = objDia;

    this.mes = objMes;

    this.ano = objAno;

    }

    }
    

Neste exemplo, o Struct é criado no próprio arquivo Program.cs, sendo que o método Main() deve ficar dentro da Struct. Confira como deve ficar o código completo:


    struct Data
    struct Data

    {

    int dia, mes, ano;



    public Data(int objDia, int objMes, int objAno)

    {

    this.dia = objDia;

    this.mes = objMes;

    this.ano = objAno;

    }



    static void Main(string[] args)

    {

    //Instancio meu Struct, passando os parâmetros referentes ao dia, mês e ano e exibo ao usuário

    Data objDataHoje = new Data(30, 01, 2011);



    Console.WriteLine("\nData de Hoje: " + objDataHoje.dia + "/" + objDataHoje.mes + "/" + objDataHoje.ano + "\n");



    //Atribuo a variável objDataHoje à variável objDataOntem, decremento o valor em 1 e exibo ao usuário

    Data objDataOntem = objDataHoje;

    objDataOntem.dia--;



    Console.WriteLine("Data de Ontem: " + objDataOntem.dia + "/" + objDataOntem.mes + "/" + objDataOntem.ano + "\n");



    //Atribuo a variável objDataHoje à variável objDataAmanha, incremento o valor em 1 e exibo ao usuário

    Data objDataAmanha = objDataHoje;

    objDataAmanha.dia++;



    Console.WriteLine("Data de Amanhã: " + objDataAmanha.dia + "/" + objDataAmanha.mes + "/" + objDataAmanha.ano +
    "\n");



    Console.ReadKey();

    }

    }
    

Compilando a aplicação, temos o seguinte resultado:

Imagem do resultado
Resultado da compilação.

Simples, né?

Assim finalizo o artigo. Muito obrigado a todos!
Um abraço, e até o próximo artigo.