Differenza tra Struct e Class in C#

Muhammad Maisam Abbas 16 febbraio 2024
  1. Struttura in C#
  2. Classe in C#
  3. Differenza tra struttura e classe in C#
Differenza tra Struct e Class in C#

In questo tutorial, discuteremo le differenze e le somiglianze tra strutture e classi in C#.

Struttura in C#

La parola chiave struct definisce una struttura in C#. Simile a una classe, una struttura può contenere variabili, proprietà e funzioni. Possiamo definire costruttori per strutture in C#. Tuttavia, non è possibile definire costruttori predefiniti per le strutture in C#. Non è possibile definire distruttori per strutture in C#. Le strutture possono anche implementare interfacce in C#. La principale differenza tra strutture e classi è che non possiamo usare una struttura come base di altre strutture o classi per l’ereditarietà. Il seguente esempio di codice ci mostra come definire una struttura semplice usando la parola chiave struct in C#.

struct MyStructure {
  public int x;
};

Nel codice sopra, definiamo una struttura con la parola chiave struct in C#. Le strutture possono essere utilizzate creando un’istanza. Di seguito viene fornito il codice per la creazione di un’istanza di una struttura.

MyStructure S = new MyStructure();

Nel codice sopra, abbiamo creato un’istanza della struttura MyStructure con la parola chiave new in C#.

Classe in C#

La parola chiave class definisce una classe in C#. Simile a una struttura, una classe può avere variabili, proprietà e funzioni in C#. Possiamo anche definire costruttori e distruttori predefiniti per le classi in C#. Una caratteristica fondamentale delle classi è l’ereditarietà. Quindi, una classe può essere utilizzata come base di altre classi per l’ereditarietà. Un’altra caratteristica unica delle classi è il polimorfismo. Il seguente esempio di codice ci mostra come definire una semplice classe usando la parola chiave class in 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);
  }
}

Nel codice sopra, definiamo una classe con la parola chiave class in C#. Le classi possono essere utilizzate creando un’istanza. Di seguito viene fornito il codice per la creazione di un’istanza di una classe.

MyClass C = new MyClass(100);

Nel codice sopra, abbiamo creato un’istanza della classe MyClass con la parola chiave new in C#.

Differenza tra struttura e classe in C#

Le strutture sono variabili di tipo valore e risiedono nello stack. Le classi sono variabili di tipo riferimento e risiedono nell’heap con riferimento a quell’heap all’interno dello stack.

Le strutture non possono avere valori nulli, mentre le classi possono avere valori nulli. Significa che una variabile di tipo valore deve avere un valore, mentre una variabile di tipo riferimento potrebbe o meno puntare a un indirizzo di memoria. La differenza tra strutture e classi in C# è dimostrata nell’esempio di codifica riportato di seguito.

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);

Produzione:

Structure 1 = 100 Structure 2 = 200

Per prima cosa abbiamo creato un’istanza S della struttura MyStructure e poi abbiamo creato un’altra copia della stessa istanza - S2. Successivamente, abbiamo inizializzato i valori all’interno di entrambe le istanze.

Nell’output, otteniamo due valori diversi per due diverse copie dell’istanza. Ciò significa che ci sono due copie separate della struttura MyStructure all’interno dello stack. La copia di una variabile di tipo valore in un’altra variabile crea una copia separata di tutti i contenuti della variabile di tipo valore.

Nel seguente esempio di codice, faremo la stessa cosa con la classe MyClass.

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

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

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

Produzione:

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

Abbiamo prima creato un’istanza C della classe MyClass e poi copiata quell’istanza in un’altra istanza, newC, della classe MyClass. Dopodiché, impostiamo il valore della variabile x all’interno di entrambe le istanze con la funzione setx().

Nell’output, otteniamo gli stessi valori della variabile x all’interno di entrambe le istanze. Ciò significa che entrambe le istanze C e newC puntano alla stessa posizione di memoria all’interno dell’heap. Copia solo il riferimento della variabile del tipo di riferimento quando si copia una variabile del tipo di riferimento in un’altra variabile.

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

Articolo correlato - Csharp Class