A diferença mais essencial entre class e struct é que class é um tipo de referência, enquanto struct é um tipo de valor, e sua alocação na memória é diferente.
O que é classe?
Classe, um conceito fundamental na programação orientada a objetos, é um tipo de estrutura de dados personalizada que normalmente contém campos, atributos, métodos, atributos, construtores, indexadores, operadores, etc. No .NET, todas as classes herdam da classe System.Object, então são um tipo de referência, ou seja, quando você nova uma instância de uma classe, o endereço dessa instância no heap gerenciado é armazenado na pilha, e o valor da instância é armazenado no heap gerenciado.
O que é um struct?
Uma estrutura é um tipo de valor usado para organizar um conjunto de variáveis relacionadas em uma única entidade variável. Todas as estruturas são herdadas da classe System.ValueType, então são um tipo de valor, ou seja, a instância struct é criada na pilha onde a thread é atribuída e armazena o valor por si só. Então, ao usar struct, podemos tratá-lo como uma classe de tipo básica, como int e char.
1. classe é o tipo de referência, e structs é o tipo de valor
Como class é um tipo de referência, class pode ser definida como nula. Mas não podemos tornar struct nulo porque é um tipo de valor.
2. Quando você instancia uma classe, ela será criada no heap. E você instancia um struct, que será criado na pilha
3. Você está usando uma referência a uma instância de classe. E você não está usando uma referência a uma struct. (em vez disso, use-os diretamente)
4. Quando passamos classe como argumento para um método, passamos uma referência. Struct passa um valor, não uma referência.
5. Structs não podem ter inicializadores, classes podem ter inicializadores.
6. Classes podem ter construtores sem parâmetro óbvios, mas Structs não podem
7. A nova palavra-chave deve ser instanciada antes que a classe seja usada, e a Struct não precisa dela
8. A classe suporta herança e polimorfismo, Struct não. Nota: Mas o Struct pode implementar interfaces assim como classes
9. Como o Struct não suporta herança, seus membros não podem ser modificados com Internal protegido ou protegido
10. O construtor de Class não precisa inicializar todos os campos, e o construtor de Struct deve inicializar todos os campos
11. Classe pode definir um destruidor, mas Struct não pode
12. A classe é adequada para dados grandes e complexos, e o Struct é adequado para novos tipos que são frequentemente usados como uma combinação de alguns dados.
Ocasiões Aplicáveis: Struct tem vantagens de desempenho, e Class tem vantagens de extensão orientada a objetos.
O tipo usado para o armazenamento de dados subjacente é projetado como um tipo Struct, e o tipo usado para definir o comportamento da aplicação é projetado como uma Classe. Se você não tem certeza sobre a aplicação futura desse tipo, deve usar o Class. |