0Pricing
C# Academy · Lezione

Costruttori primari con gli struct

Applichi i costruttori primari ai tipi valore.

Costruttori primari con gli struct è una lezione C# Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento C# Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso C# Academy include 4 lezioni in totale.

Costruttori primari nelle struct

Anche le struct supportano i costruttori primari: struct Point(int x, int y). Funzionano in modo molto simile a quelli delle classi, dichiarando i parametri nell'intestazione.

using System;

struct Point(int x, int y) {
    public int X => x;
    public int Y => y;
}

var p = new Point(3, 4);
Console.WriteLine(p.X + "," + p.Y); // 3,4

Esiste comunque un costruttore senza parametri

Le struct hanno sempre un costruttore implicito senza parametri che produce il valore predefinito. Un costruttore primario ne aggiunge uno parametrizzato.

using System;

struct Vec(int x, int y) {
    public int X => x;
    public int Y => y;
}

var zero = new Vec(); // default: x=0, y=0
Console.WriteLine(zero.X + "," + zero.Y); // 0,0

Esporre i parametri tramite proprietà

Come per le classi, i parametri dei costruttori primari delle struct non diventano automaticamente proprietà pubbliche; li esponga in modo esplicito.

using System;

struct Size(int w, int h) {
    public int Width { get; } = w;
    public int Height { get; } = h;
}

var s = new Size(10, 20);
Console.WriteLine(s.Width * s.Height); // 200

Membri calcolati

I costruttori primari delle struct si combinano bene con i membri calcolati con corpo a espressione.

using System;

struct Complex(double re, double im) {
    public double Magnitude => Math.Sqrt(re * re + im * im);
}

Console.WriteLine(new Complex(3, 4).Magnitude); // 5

Struct readonly

Una readonly struct con un costruttore primario garantisce l'immutabilità. Nessun membro deve modificare lo stato, caratteristica che si adatta perfettamente alle proprietà con il solo accessor get.

using System;

readonly struct Money(decimal amount, string currency) {
    public decimal Amount { get; } = amount;
    public string Currency { get; } = currency;
    public string Display => Amount.ToString("0.00") + " " + Currency;
}

Console.WriteLine(new Money(5m, "USD").Display); // 5.00 USD

Collegarsi al costruttore primario

I costruttori aggiuntivi delle struct devono chiamare quello primario con : this(...), proprio come nelle classi.

using System;

struct Square(int side) {
    public int Side => side;
    public int Area => side * side;
    public Square() : this(1) { } // explicit default side
}

Console.WriteLine(new Square(4).Area); // 16

Costruttore predefinito e costruttore primario

Noti che new Square() può usare sia l'inizializzazione implicita a zero sia il costruttore senza parametri dichiarato. Se ne definisce uno con concatenamento, verrà eseguita la relativa logica.

using System;

struct Pct(double value) {
    public double Value { get; } = value;
    public Pct() : this(100) { }
}

Console.WriteLine(new Pct().Value); // 100

La semantica dei valori rimane invariata

Le struct vengono ancora copiate per valore. Un costruttore primario non cambia questo comportamento: assegnare una struct copia tutti i suoi campi.

using System;

struct Counter(int n) {
    public int N { get; set; } = n;
}

var a = new Counter(1);
var b = a;       // copy
b.N = 99;
Console.WriteLine(a.N + " " + b.N); // 1 99

Inizializzare campi modificabili

È possibile inizializzare proprietà o campi con accessor set a partire dai parametri, anche se in genere è preferibile usare struct immutabili.

using System;

struct Bag(int capacity) {
    public int Capacity { get; set; } = capacity;
    public int Used { get; set; } = 0;
}

var bag = new Bag(10);
bag.Used = 3;
Console.WriteLine(bag.Capacity - bag.Used); // 7

Decostruzione

Abbini un costruttore primario a un metodo Deconstruct per ottenere una destrutturazione simile a quella delle tuple.

using System;

struct Point(int x, int y) {
    public int X => x;
    public int Y => y;
    public void Deconstruct(out int a, out int b) { a = x; b = y; }
}

var (px, py) = new Point(7, 8);
Console.WriteLine(px + "," + py); // 7,8

Combinare il tutto

Un piccolo tipo valore immutabile creato con una readonly struct e un costruttore primario.

using System;

readonly struct Temperature(double celsius) {
    public double Celsius { get; } = celsius;
    public double Fahrenheit => Celsius * 9 / 5 + 32;
}

var t = new Temperature(25);
Console.WriteLine(t.Fahrenheit); // 77

Verifica rapida

Verifichi la sua comprensione dei costruttori primari nelle struct.

Riepilogo

Ha imparato a usare i costruttori primari nelle struct.

  • struct P(int x, int y) dichiara i parametri nell'intestazione.
  • Il costruttore implicito senza parametri continua a esistere.
  • Combini il costruttore con readonly struct per creare tipi valore immutabili.
  • I costruttori aggiuntivi si collegano con : this(...).

Domande Frequenti

La lezione «Costruttori primari con gli struct» è gratuita?

Sì — il testo completo di «Costruttori primari con gli struct» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso C# Academy, passa a CoddyKit PRO. Il corso C# Academy include 4 lezioni in totale.

Cosa imparerò in «Costruttori primari con gli struct»?

Applichi i costruttori primari ai tipi valore. Eserciti C# Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare C# Academy?

Non è richiesta alcuna esperienza precedente. C# Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.

Quanto tempo richiede la lezione «Costruttori primari con gli struct»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione C# Academy?

Sì. Ogni lezione C# Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Costruttori primari nelle classi
  2. Cattura dei parametri nei membri
  3. Costruttori primari con gli struct
  4. Combinazione con proprietà e tipi base
← Torna a C# Academy