0Pricing
C# Academy · Lezione

Costruttori primari nelle classi

Dichiari i parametri del costruttore nell'intestazione del tipo.

Costruttori primari nelle classi è una lezione C# Academy gratuita su CoddyKit. Questa è la lezione 1 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.

Che cos'è un costruttore primario?

Un costruttore primario consente di dichiarare i parametri del costruttore direttamente nell'intestazione della classe, ad esempio class Point(int x, int y). I parametri sono nell'ambito dell'intero corpo della classe.

using System;

class 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

Niente più codice ripetitivo

Prima dei costruttori primari era necessario scrivere il corpo di un costruttore solo per copiare i parametri nei campi. Ora l'intestazione dichiara i parametri, che possono essere usati direttamente.

using System;

class Greeter(string name) {
    public string Greet() => "Hello, " + name + "!";
}

Console.WriteLine(new Greeter("Ada").Greet()); // Hello, Ada!

I parametri sono disponibili ovunque

I parametri del costruttore primario possono essere usati negli inizializzatori di proprietà, nei corpi dei metodi e negli inizializzatori di campi in qualsiasi punto della classe.

using System;

class Circle(double radius) {
    public double Area => Math.PI * radius * radius;
    public double Circumference => 2 * Math.PI * radius;
}

var c = new Circle(2);
Console.WriteLine(Math.Round(c.Area, 2)); // 12.57

Inizializzare campi e proprietà

È possibile usare un parametro del costruttore primario per inizializzare un campo o una proprietà al momento della dichiarazione.

using System;

class Account(decimal initial) {
    public decimal Balance { get; private set; } = initial;
    public void Deposit(decimal amount) => Balance += amount;
}

var a = new Account(100m);
a.Deposit(50m);
Console.WriteLine(a.Balance); // 150

Convalida nell'intestazione

È possibile convalidare inline i parametri del costruttore primario usando espressioni throw durante l'assegnazione a un campo.

using System;

class Person(string name) {
    public string Name { get; } =
        string.IsNullOrWhiteSpace(name)
            ? throw new ArgumentException("name required")
            : name;
}

Console.WriteLine(new Person("Lin").Name); // Lin

Aggiungere altri costruttori

Una classe con un costruttore primario può comunque dichiarare altri costruttori, ma questi devono concatenarsi al costruttore primario tramite : this(...).

using System;

class Box(int width, int height) {
    public int Width => width;
    public int Height => height;
    public Box(int size) : this(size, size) { }
}

var sq = new Box(5);
Console.WriteLine(sq.Width + "x" + sq.Height); // 5x5

Corpi dei costruttori primari

I costruttori primari non hanno un corpo proprio. La logica che deve essere eseguita durante la costruzione va inserita negli inizializzatori di campi o in un costruttore normale concatenato.

using System;

class Logger(string prefix) {
    private readonly string tag = "[" + prefix + "]";
    public void Log(string msg) => Console.WriteLine(tag + " " + msg);
}

new Logger("INFO").Log("started"); // [INFO] started

Non sono automaticamente proprietà pubbliche

A differenza dei record, un costruttore primario in una classe normale non crea proprietà pubbliche. I parametri sono privati della classe, a meno che non li esponga esplicitamente.

using System;

class Temp(double celsius) {
    // celsius is NOT a public property here
    public double Fahrenheit => celsius * 9 / 5 + 32;
}

Console.WriteLine(new Temp(100).Fahrenheit); // 212

I parametri acquisiti diventano campi

Quando un parametro del costruttore primario viene usato in un metodo, e non solo in un inizializzatore, il compilatore lo acquisisce in un campo nascosto, in modo che rimanga disponibile dopo la costruzione.

using System;

class Counter(int start) {
    private int value = start;
    public int Next() => value++;
}

var c = new Counter(10);
Console.WriteLine(c.Next()); // 10
Console.WriteLine(c.Next()); // 11

Dependency injection più semplice

I costruttori primari sono molto usati per la DI: si dichiarano i servizi nell'intestazione e li si usa nei metodi, senza assegnare manualmente i campi.

using System;

interface IClock { string Now(); }
class FakeClock : IClock { public string Now() => "12:00"; }

class Service(IClock clock) {
    public string Report() => "Time is " + clock.Now();
}

Console.WriteLine(new Service(new FakeClock()).Report()); // Time is 12:00

Mettere insieme i concetti

Questa classe usa un costruttore primario per le proprie dipendenze ed espone una proprietà calcolata, senza un corpo esplicito del costruttore.

using System;

class Rectangle(double w, double h) {
    public double Area => w * h;
    public double Perimeter => 2 * (w + h);
}

var r = new Rectangle(3, 4);
Console.WriteLine(r.Area + " " + r.Perimeter); // 12 14

Verifica rapida

Verifichi la Sua comprensione dei costruttori primari nelle classi.

Riepilogo

Ha appreso i costruttori primari nelle classi.

  • class C(int x) dichiara i parametri del costruttore nell'intestazione.
  • I parametri sono disponibili nell'intero corpo della classe.
  • I costruttori aggiuntivi si concatenano tramite : this(...).
  • In una classe normale non diventano automaticamente proprietà pubbliche.

Domande Frequenti

La lezione «Costruttori primari nelle classi» è gratuita?

Sì — il testo completo di «Costruttori primari nelle classi» è 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 nelle classi»?

Dichiari i parametri del costruttore nell'intestazione del tipo. 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 1 di 4.

Quanto tempo richiede la lezione «Costruttori primari nelle classi»?

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