0Pricing
C# Academy · Leçon

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,4

Dé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); // prod

Les 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 14

Associer 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); // admin

Valeurs 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); // 5

init 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); // 2

init 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); // 80

init 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); // 100

Initialiseurs 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 / Oslo

init 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 Pen

Mise 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.9

Vé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 init explicite.
  • Les propriétés positionnelles des enregistrements sont init par 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

  1. Accesseurs init uniquement
  2. Le modificateur required
  3. Modèles d’objets immuables
  4. Expressions with sur les enregistrements
← Retour à C# Academy