Classes x Structs exemplos com C#

Marcio Nizzola
3 min readJul 27, 2019

--

Certo dia ao participar de uma entrevista com um candidato à uma vaga de .NET um colega de trabalho fez a seguinte pergunta ao candidato: “Classes ou Structs quando usar ?”, vi que tal pergunta causou algum desconforto pois o candidato não soube responder, fiquei pensando se todos os programadores .NET algum dia realmente utilizaram uma Struct ou pelo menos sabiam do que ela se trata, afinal, podemos fazer qualquer coisa em .NET sem sequer ter uma única vez sabido da existência de Struct, pois Classes e Structs possuem uma certa equivalência !

Classe

Primeiramente vamos entender o que é uma classe ! Ela pode ser definida como um molde, para criação de objetos, é classificada como um “tipo de referência”, além de dados, contém operações, herança e todo aquele resto que você estuda nas aulas de UML e OO. Suas propriedades e métodos podem ser definidos como públicos, privados ou protegidos. Como sua principal diferença é que são alocados no heap e utilizam a coleta de lixo (garbage collector).

Quando um objeto da classe é criado, a variável à qual o objeto é atribuído armazena apenas uma referência na memória. Quando a referência de objeto é atribuída a uma nova variável, a nova variável refere-se ao objeto original. As alterações feitas por meio de uma variável são refletidas na outra variável porque ambas se referem aos mesmos dados.

Struct

Uma struct pode ser definida como um “tipo de valor”, são conjuntos de dados que se mantém juntos, dificilmente colocamos métodos nelas e construtores. Suas propriedades e métodos são públicos por padrão. Elementos do tipo struct são alocados na pilha ou embutido no que contém tipos e desalocada quando a pilha esvazia ou quando seu tipo recipiente é desalocado.

Então as alocações e Desalocações de tipos de valor (structs) são em geral, mais baratas do que as alocações e Desalocações de tipos de referência (classes).

Todos os tipos ‘struct’ implicitamente herdam da classe ‘System.ValueType’.

Uma ‘struct’ não pode ter um construtor sem parâmetros, assim como não pode declarar um destrutor.

Considerem criar um struct, em vez de uma classe, se as instâncias do tipo são pequenas e geralmente de curta duração ou geralmente são inseridas em outros objetos, além de não possuírem quaisquer restrições de acesso, já que suas propriedades e métodos são públicos.

Um struct é um tipo de valor. Quando um struct é criado, a variável à qual o struct está atribuído contém os dados reais do struct. Quando o struct é atribuído a uma nova variável, ele é copiado. A nova variável e a variável original, portanto, contêm duas cópias separadas dos mesmos dados. As alterações feitas em uma cópia não afetam a outra cópia.

Segue abaixo um exemplo de utilização das duas estruturas e o resultado das operações:

Este quadro demonstra algumas diferenças entre elas.

Pronto ! então por hoje é só isso, agora já sabem a diferença !

Referências:

--

--

Marcio Nizzola
Marcio Nizzola

Written by Marcio Nizzola

Microsoft MVP | Software Architect na CI&T | Prof. da Etec Itu | Membro Fundador da Comunidade Itu Developers.

No responses yet