Accesseurs init uniquement
Créez des propriétés modifiables uniquement lors de l’initialisation.
Accesseurs init uniquement est une leçon C# Academy gratuite sur CoddyKit. Ceci est la leçon 1 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.
Accesseurs init uniquement
Un accesseur init permet de définir une propriété pendant la construction de l’objet, y compris dans les initialiseurs d’objet, mais la rend accessible uniquement en lecture par la suite. Sa forme est { get; init; }.
using System;
class Point {
public int X { get; init; }
public int Y { get; init; }
}
var p = new Point { X = 3, Y = 4 };
Console.WriteLine(p.X + "," + p.Y); // 3,4Définir uniquement lors de l’initialisation
Une fois l’objet construit, affecter une propriété init produit une erreur de compilation, ce qui garantit son immuabilité après la construction.
using System;
class Config {
public string Name { get; init; }
}
var c = new Config { Name = "prod" };
// c.Name = "dev"; // compile error
Console.WriteLine(c.Name); // prodLes initialiseurs d’objet fonctionnent toujours
Le principal avantage par rapport à une propriété accessible uniquement en lecture est que init prend en charge la syntaxe des initialiseurs d’objet ; vous n’avez donc pas besoin d’un constructeur pour chaque propriété.
using System;
class Settings {
public bool DarkMode { get; init; }
public int FontSize { get; init; }
}
var s = new Settings { DarkMode = true, FontSize = 14 };
Console.WriteLine(s.DarkMode + " " + s.FontSize); // True 14Associer aux constructeurs
Vous pouvez définir les propriétés init depuis un constructeur tout en autorisant leur remplacement dans les initialiseurs.
using System;
class User {
public string Role { get; init; } = "guest";
public User() { }
}
var u = new User { Role = "admin" };
Console.WriteLine(u.Role); // adminValeurs par défaut
Les propriétés init peuvent avoir des initialiseurs par défaut qui s’appliquent sauf si une autre valeur est fournie lors de la construction.
using System;
class Options {
public int Retries { get; init; } = 3;
}
Console.WriteLine(new Options().Retries); // 3
Console.WriteLine(new Options { Retries = 5 }.Retries); // 5init ou set
Un accesseur set autorise la modification à tout moment ; init limite l’affectation à la phase de construction. Choisissez init pour les données immuables après leur création.
using System;
class Mutable { public int V { get; set; } }
class Frozen { public int V { get; init; } }
var m = new Mutable { V = 1 };
m.V = 2; // allowed
Console.WriteLine(m.V); // 2init avec validation
Vous pouvez implémenter un corps init explicite avec un champ de stockage afin de valider la valeur affectée.
using System;
class Percentage {
private int _value;
public int Value {
get => _value;
init => _value = (value < 0 || value > 100)
? throw new ArgumentOutOfRangeException()
: value;
}
}
Console.WriteLine(new Percentage { Value = 80 }.Value); // 80init dans les enregistrements
Les propriétés des enregistrements positionnels sont init par défaut, ce qui explique pourquoi les enregistrements sont immuables tout en prenant en charge les copies with.
using System;
record Account(string Id, decimal Balance);
var a = new Account("A1", 100m);
Console.WriteLine(a.Balance); // 100Initialiseurs d’objet imbriqués
init fonctionne avec les initialiseurs d’objet imbriqués, ce qui vous permet de créer des graphes immuables complexes dans une seule expression.
using System;
class Address { public string City { get; init; } }
class Person { public string Name { get; init; } public Address Home { get; init; } }
var p = new Person { Name = "Lin", Home = new Address { City = "Oslo" } };
Console.WriteLine(p.Name + " / " + p.Home.City); // Lin / Osloinit et héritage
Les classes dérivées peuvent définir les propriétés init de la classe de base via des initialiseurs d’objet, puisque la phase de construction couvre l’ensemble de l’objet.
using System;
class Base { public int Id { get; init; } }
class Item : Base { public string Name { get; init; } }
var i = new Item { Id = 1, Name = "Pen" };
Console.WriteLine(i.Id + " " + i.Name); // 1 PenMise en pratique
Un objet de transfert de données immuable créé entièrement avec des propriétés init et un initialiseur d’objet.
using System;
class OrderDto {
public int Id { get; init; }
public string Customer { get; init; }
public decimal Amount { get; init; }
}
var o = new OrderDto { Id = 7, Customer = "Ada", Amount = 49.9m };
Console.WriteLine(o.Id + " " + o.Customer + " " + o.Amount); // 7 Ada 49.9Vérification rapide
Testez votre compréhension des accesseurs init uniquement.
Récapitulatif
Vous avez appris à utiliser les accesseurs init uniquement.
{ get; init; }autorise l’affectation uniquement pendant la construction.- Les initialiseurs d’objet fonctionnent avec les propriétés
init. - Vous pouvez ajouter une validation via un corps
initexplicite. - Les propriétés positionnelles des enregistrements sont
initpar défaut.
Questions Fréquemment Posées
La leçon « Accesseurs init uniquement » est-elle gratuite ?
Oui — le texte complet de « Accesseurs init uniquement » 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 « Accesseurs init uniquement » ?
Créez des propriétés modifiables uniquement lors de l’initialisation. 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 1 sur 4.
Combien de temps prend la leçon « Accesseurs init uniquement » ?
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
- Accesseurs init uniquement
- Le modificateur required
- Modèles d’objets immuables
- Expressions with sur les enregistrements