Initialiseurs d’objets et de collections
Définissez les propriétés de manière concise lors de la création.
Initialiseurs d’objets et de collections est une leçon C# Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage C# Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours C# Academy comprend 4 leçons au total.
Qu’est-ce qu’un initialiseur d’objet ?
Un initialiseur d’objet définit les propriétés ou les champs publics juste après new, à l’intérieur de { }, sans devoir écrire un constructeur pour chaque combinaison.
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);
}
}Syntaxe des initialiseurs
Répertoriez les affectations de propriétés, séparées par des virgules, entre les accolades. Elles s’exécutent une fois le constructeur terminé.
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);
}
}Combiner constructeur et initialiseur
Vous pouvez appeler un constructeur ET utiliser un initialiseur. Le constructeur s’exécute en premier, puis l’initialiseur affecte les propriétés indiquées.
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);
}
}Initialiser seulement certaines propriétés
Indiquez uniquement les propriétés qui vous intéressent ; les autres conservent leurs valeurs par défaut. Les initialiseurs gagnent ainsi en souplesse.
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);
}
}Initialiseurs de collections
Un initialiseur de collection remplit une liste, un ensemble ou un tableau lors de sa création, à l’aide de { } et d’éléments séparés par des virgules.
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;
}
}Fonctionnement des initialiseurs de collections
Le compilateur transforme chaque élément en appel à Add(...). Tout type possédant une méthode Add et prenant en charge IEnumerable accepte cette syntaxe.
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);
}
}Initialiseurs de dictionnaires
Les dictionnaires peuvent être initialisés avec des paires clé-valeur entre accolades, ce qui est très pratique pour les tables de correspondance.
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"]);
}
}Initialiseurs d’objets imbriqués
Un initialiseur d’objet peut initialiser des objets imbriqués et construire un petit graphe d’objets en une seule expression.
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);
}
}Collections d’objets
Combinez les deux fonctionnalités : initialisez une liste dont les éléments sont eux-mêmes construits avec des initialiseurs d’objets.
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);
}
}Initialiseurs et propriétés init
Les initialiseurs d’objets permettent de définir les propriétés limitées à init, puisqu’elles ne peuvent être affectées que pendant l’initialisation.
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);
}
}Mise en pratique
Les initialiseurs rendent la construction déclarative et lisible, notamment pour les objets de configuration et les données de 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");
}
}Vérification rapide
Testez votre compréhension des initialiseurs.
Récapitulatif
Les initialiseurs d’objets définissent les membres publics dans { } après new, une fois le constructeur exécuté. Les initialiseurs de collections ajoutent des éléments au moyen d’appels implicites à Add, et les dictionnaires prennent en charge les paires clé-valeur. Les deux types peuvent être imbriqués, fonctionner avec les propriétés init et rendre la construction concise et déclarative.
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);
}
}Questions Fréquemment Posées
La leçon « Initialiseurs d’objets et de collections » est-elle gratuite ?
Oui — le texte complet de « Initialiseurs d’objets et de collections » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours C# Academy, passe à CoddyKit PRO. Le cours C# Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Initialiseurs d’objets et de collections » ?
Définissez les propriétés de manière concise lors de la création. Tu pratiques C# Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer C# Academy ?
Aucune expérience préalable n'est requise. C# Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.
Combien de temps prend la leçon « Initialiseurs d’objets et de collections » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon C# Academy ?
Oui. Chaque leçon C# Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Définir des constructeurs
- Chaînage de constructeurs avec this
- Initialiseurs d’objets et de collections
- Constructeurs statiques