0Pricing
C# Academy · Lezione

Inizializzatori di oggetti e raccolte

Imposti le proprietà in modo conciso al momento della creazione.

Inizializzatori di oggetti e raccolte è 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.

Che cos'è un inizializzatore di oggetti?

Un inizializzatore di oggetti imposta le proprietà o i campi pubblici subito dopo new, all'interno di { }, senza dover scrivere un costruttore per ogni combinazione.

using System;

class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

class Program
{
    static void Main()
    {
        var p = new Person { Name = "Ada", Age = 36 };
        Console.WriteLine(p.Name + ", " + p.Age);
    }
}

Sintassi degli inizializzatori

Elenca le assegnazioni delle proprietà, separandole con virgole all'interno delle parentesi graffe. Vengono eseguite dopo il completamento del costruttore.

using System;

class Car
{
    public string Make { get; set; }
    public string Model { get; set; }
    public int Year { get; set; }
}

class Program
{
    static void Main()
    {
        var car = new Car
        {
            Make = "Toyota",
            Model = "Corolla",
            Year = 2022
        };
        Console.WriteLine(car.Year + " " + car.Make + " " + car.Model);
    }
}

Combinare costruttore e inizializzatore

Può chiamare un costruttore E usare un inizializzatore. Il costruttore viene eseguito per primo, quindi l'inizializzatore assegna le proprietà elencate.

using System;

class Widget
{
    public string Id { get; }
    public string Label { get; set; }

    public Widget(string id) { Id = id; }
}

class Program
{
    static void Main()
    {
        var w = new Widget("w1") { Label = "Submit" };
        Console.WriteLine(w.Id + ": " + w.Label);
    }
}

Inizializzare solo alcune proprietà

Elenca solo le proprietà che Le interessano; le altre mantengono i propri valori predefiniti. Questo rende flessibili gli inizializzatori.

using System;

class Settings
{
    public bool DarkMode { get; set; } = false;
    public int Volume { get; set; } = 50;
    public string Lang { get; set; } = "en";
}

class Program
{
    static void Main()
    {
        var s = new Settings { DarkMode = true };
        Console.WriteLine(s.DarkMode + ", " + s.Volume + ", " + s.Lang);
    }
}

Inizializzatori di raccolte

Un inizializzatore di raccolte riempie un elenco, un insieme o un array al momento della creazione, usando { } con elementi separati da virgole.

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        var nums = new List<int> { 1, 2, 3, 4, 5 };
        Console.WriteLine("Count: " + nums.Count);
        Console.WriteLine("Sum: " + Sum(nums));
    }

    static int Sum(List<int> list)
    {
        int t = 0;
        foreach (var n in list) t += n;
        return t;
    }
}

Come funzionano gli inizializzatori di raccolte

Il compilatore trasforma ogni elemento in una chiamata a Add(...). Qualsiasi tipo con un metodo Add e IEnumerable supporta questa sintassi.

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        var names = new List<string> { "Ann", "Bob", "Cara" };
        foreach (var n in names)
            Console.WriteLine(n);
    }
}

Inizializzatori di dizionari

I dizionari possono essere inizializzati con coppie chiave/valore tra parentesi graffe, una soluzione molto pratica per le tabelle di ricerca.

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        var ages = new Dictionary<string, int>
        {
            ["Ann"] = 30,
            ["Bob"] = 25
        };
        Console.WriteLine("Ann is " + ages["Ann"]);
    }
}

Inizializzatori di oggetti annidati

Un inizializzatore di oggetti può inizializzare oggetti annidati, costruendo un piccolo grafo di oggetti in un'unica espressione.

using System;

class Address
{
    public string City { get; set; }
}

class Customer
{
    public string Name { get; set; }
    public Address Home { get; set; } = new Address();
}

class Program
{
    static void Main()
    {
        var c = new Customer
        {
            Name = "Lin",
            Home = new Address { City = "Tokyo" }
        };
        Console.WriteLine(c.Name + " in " + c.Home.City);
    }
}

Raccolte di oggetti

Combini entrambe le funzionalità: inizializzi un elenco i cui elementi vengono a loro volta creati con inizializzatori di oggetti.

using System;
using System.Collections.Generic;

class Item
{
    public string Name { get; set; }
    public decimal Price { get; set; }
}

class Program
{
    static void Main()
    {
        var cart = new List<Item>
        {
            new Item { Name = "Pen", Price = 1.5m },
            new Item { Name = "Book", Price = 9.0m }
        };
        decimal total = 0;
        foreach (var i in cart) total += i.Price;
        Console.WriteLine("Total: " + total);
    }
}

Inizializzatori e proprietà init

Gli inizializzatori di oggetti sono il modo per impostare le proprietà che accettano solo init, poiché queste possono essere assegnate solo durante l'inizializzazione.

using System;

class Config
{
    public string Env { get; init; }
    public int Retries { get; init; }
}

class Program
{
    static void Main()
    {
        var c = new Config { Env = "prod", Retries = 3 };
        Console.WriteLine(c.Env + " / " + c.Retries);
    }
}

Mettere tutto insieme

Gli inizializzatori rendono la costruzione dichiarativa e leggibile, soprattutto per gli oggetti di configurazione e i dati di test.

using System;
using System.Collections.Generic;

class Team
{
    public string Name { get; set; }
    public List<string> Members { get; set; } = new List<string>();
}

class Program
{
    static void Main()
    {
        var t = new Team
        {
            Name = "Alpha",
            Members = { "Ann", "Bob", "Cara" }
        };
        Console.WriteLine(t.Name + " has " + t.Members.Count + " members");
    }
}

Verifica rapida

Metta alla prova la Sua comprensione degli inizializzatori.

Riepilogo

Gli inizializzatori di oggetti impostano i membri pubblici in { } dopo new e vengono eseguiti dopo il costruttore. Gli inizializzatori di raccolte aggiungono elementi tramite chiamate implicite a Add, mentre i dizionari supportano coppie chiave/valore. Entrambi possono essere annidati, funzionano con le proprietà init e rendono la costruzione concisa e dichiarativa.

using System;
using System.Collections.Generic;

class Demo
{
    public string Name { get; set; }
    public List<int> Nums { get; set; } = new List<int>();
}

class Program
{
    static void Main()
    {
        var d = new Demo { Name = "x", Nums = { 1, 2, 3 } };
        Console.WriteLine(d.Name + " " + d.Nums.Count);
    }
}

Domande Frequenti

La lezione «Inizializzatori di oggetti e raccolte» è gratuita?

Sì — il testo completo di «Inizializzatori di oggetti e raccolte» è 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 «Inizializzatori di oggetti e raccolte»?

Imposti le proprietà in modo conciso al momento della creazione. 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 «Inizializzatori di oggetti e raccolte»?

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. Definizione dei costruttori
  2. Concatenamento dei costruttori con this
  3. Inizializzatori di oggetti e raccolte
  4. Costruttori statici
← Torna a C# Academy