C# Language struct

Esempio

Un tipo di struct è un tipo di valore che viene in genere utilizzato per incapsulare piccoli gruppi di variabili correlate, come le coordinate di un rettangolo o le caratteristiche di un articolo in un inventario.

Le classi sono tipi di riferimento, le strutture sono tipi di valore.

using static System.Console;

namespace ConsoleApplication1
{
    struct Point
    {
        public int X;
        public int Y;

        public override string ToString()
        {
            return $"X = {X}, Y = {Y}";
        }

        public void Display(string name)
        {
            WriteLine(name + ": " + ToString());
        }
    }

    class Program
    {
        static void Main()
        {
            var point1 = new Point {X = 10, Y = 20};
            // it's not a reference but value type
            var point2 = point1;
            point2.X = 777;
            point2.Y = 888;
            point1.Display(nameof(point1)); // point1: X = 10, Y = 20
            point2.Display(nameof(point2)); // point2: X = 777, Y = 888

            ReadKey();
        }
    }
}

Le strutture possono anche contenere costruttori, costanti, campi, metodi, proprietà, indicizzatori, operatori, eventi e tipi annidati, sebbene se siano richiesti più di questi membri, dovresti prendere in considerazione la creazione di una classe invece.


Alcuni suggerimenti da MS su quando usare struct e quando usare la classe:

TENERE CONTO

definire una struct invece di una classe se le istanze del tipo sono piccole e comunemente di breve durata o sono comunemente incorporate in altri oggetti.

EVITARE

definire una struttura a meno che il tipo abbia tutte le seguenti caratteristiche:

  • Rappresenta logicamente un singolo valore, simile ai tipi primitivi (int, double, ecc.)
  • Ha una dimensione dell'istanza inferiore a 16 byte.
  • È immutabile.
  • Non dovrà essere incassato frequentemente.