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,4Esiste 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,0Esporre 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); // 200Membri 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); // 5Struct 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 USDCollegarsi 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); // 16Costruttore 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); // 100La 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 99Inizializzare 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); // 7Decostruzione
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,8Combinare 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); // 77Verifica 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 structper 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
- Costruttori primari nelle classi
- Cattura dei parametri nei membri
- Costruttori primari con gli struct
- Combinazione con proprietà e tipi base