Diferença entre Struct e Class em C#

Muhammad Maisam Abbas 16 fevereiro 2024
  1. Estrutura em C#
  2. Aula em C#
  3. Diferença entre estrutura e classe em C#
Diferença entre Struct e Class em C#

Neste tutorial, discutiremos as diferenças e semelhanças entre estruturas e classes em C#.

Estrutura em C#

A palavra-chave struct define uma estrutura em C#. Semelhante a uma classe, uma estrutura pode conter variáveis, propriedades e funções. Podemos definir construtores para estruturas em C#. Mas, não podemos definir construtores padrão para estruturas em C#. Não podemos definir destruidores para estruturas em C#. As estruturas também podem implementar interfaces em C#. A principal diferença entre estruturas e classes é que não podemos usar uma estrutura como base de outras estruturas ou classes para herança. O exemplo de código a seguir nos mostra como definir uma estrutura simples usando a palavra-chave struct em C#.

struct MyStructure {
  public int x;
};

No código acima, definimos uma estrutura com a palavra-chave struct em C#. As estruturas podem ser usadas criando uma instância. O código para criar uma instância de uma estrutura é fornecido abaixo.

MyStructure S = new MyStructure();

No código acima, criamos uma instância da estrutura MyStructure com a palavra-chave new em C#.

Aula em C#

A palavra-chave class define uma classe em C#. Semelhante a uma estrutura, uma classe pode ter variáveis, propriedades e funções em C#. Também podemos definir construtores e destruidores padrão para classes em C#. Uma característica chave das classes é a herança. Portanto, uma classe pode ser usada como base de outras classes para herança. Outra característica única das classes é o polimorfismo. O exemplo de código a seguir nos mostra como definir uma classe simples usando a palavra-chave class em C#.

class MyClass {
  int x;
  public MyClass(int a) {
    this.x = a;
  }
  public void setx(int a) {
    this.x = a;
  }
  public void show() {
    Console.WriteLine("The value of x = {0}", x);
  }
}

No código acima, definimos uma classe com a palavra-chave class em C#. As classes podem ser usadas criando uma instância. O código para criar uma instância de uma classe é fornecido abaixo.

MyClass C = new MyClass(100);

No código acima, criamos uma instância da classe MyClass com a palavra-chave new em C#.

Diferença entre estrutura e classe em C#

As estruturas são variáveis do tipo valor e vivem na pilha. As classes são variáveis ​​de tipo de referência e vivem no heap com referência a esse heap dentro da pilha.

As estruturas não podem ter valores nulos, enquanto as classes podem ter valores nulos. Isso significa que uma variável de tipo de valor deve ter um valor, enquanto uma variável de tipo de referência pode ou não apontar para um endereço de memória. A diferença entre estruturas e classes em C# é demonstrada no exemplo de codificação abaixo.

MyStructure S = new MyStructure();
MyStructure S2 = S;

S.x = 100;
S2.x = 200;

Console.WriteLine("Structure 1 = {0}", S.x);
Console.WriteLine("Structure 2 = {0}", S2.x);

Resultado:

Structure 1 = 100 Structure 2 = 200

Primeiro criamos uma instância S da estrutura MyStructure e depois criamos outra cópia da mesma instância - S2. Depois disso, inicializamos os valores dentro de ambas as instâncias.

Na saída, obtemos dois valores diferentes para duas cópias diferentes da instância. Isso significa que existem duas cópias separadas da estrutura MyStructure dentro da pilha. Copiar uma variável de tipo de valor em outra variável cria uma cópia separada de todo o conteúdo da variável de tipo de valor.

No exemplo de código a seguir, faremos a mesma coisa com a classe MyClass.

MyClass C = new MyClass(100);
MyClass newC = C;

newC.setx(100);
newC.setx(200);

C.show();
newC.show();

Resultado:

The value of x = 200 The value of x = 200

Primeiro criamos uma instância C da classe MyClass e depois copiamos essa instância para outra instância, newC, da classe MyClass. Depois disso, definimos o valor da variável x dentro de ambas as instâncias com a função setx().

Na saída, obtemos os mesmos valores da variável x dentro de ambas as instâncias. Isso significa que ambas as instâncias C e newC apontam para o mesmo local de memória dentro do heap. Ele apenas copia a referência da variável do tipo de referência ao copiar uma variável do tipo de referência para outra variável.

Muhammad Maisam Abbas avatar Muhammad Maisam Abbas avatar

Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.

LinkedIn

Artigo relacionado - Csharp Class