Propriétés complètes avec champs de stockage
Ajoutez une logique aux accesseurs get et set.
Propriétés complètes avec champs de stockage est une leçon C# Academy gratuite sur CoddyKit. Ceci est la leçon 2 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.
Au-delà des propriétés automatiques
Lorsque vous avez besoin de logique dans get ou set, vous écrivez une propriété complète avec un champ de stockage explicite. Le champ stocke les données ; les accesseurs contrôlent leur accès.
using System;
class Temperature
{
private double _celsius;
public double Celsius
{
get { return _celsius; }
set { _celsius = value; }
}
}
class Program
{
static void Main()
{
var t = new Temperature();
t.Celsius = 21.5;
Console.WriteLine(t.Celsius);
}
}Convention des champs de stockage
Par convention, un champ de stockage est private et porte un nom précédé d’un trait de soulignement, comme _name. La propriété publique l’expose.
using System;
class Person
{
private string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
}
class Program
{
static void Main()
{
var p = new Person();
p.Name = "Grace";
Console.WriteLine(p.Name);
}
}Le mot-clé value
Dans un accesseur set, le paramètre implicite value contient la valeur de l’affectation reçue. C’est à vous de décider quoi en faire.
using System;
class Box
{
private int _size;
public int Size
{
get { return _size; }
set { _size = value * 2; }
}
}
class Program
{
static void Main()
{
var box = new Box();
box.Size = 10;
Console.WriteLine("Stored size: " + box.Size);
}
}Validation dans l’accesseur set
Une utilisation courante d’une propriété complète consiste à valider les données d’entrée avant de les stocker, en déclenchant une exception si la valeur n’est pas valide.
using System;
class Account
{
private decimal _balance;
public decimal Balance
{
get { return _balance; }
set
{
if (value < 0)
throw new ArgumentException("Balance cannot be negative");
_balance = value;
}
}
}
class Program
{
static void Main()
{
var a = new Account();
a.Balance = 500m;
Console.WriteLine("Balance: " + a.Balance);
}
}Propriétés calculées en lecture seule
Une propriété qui ne possède qu’un accesseur get peut calculer sa valeur à partir d’autres champs. Aucun champ de stockage n’est nécessaire, car rien n’est stocké.
using System;
class Rectangle
{
private double _width;
private double _height;
public Rectangle(double w, double h)
{
_width = w;
_height = h;
}
public double Area
{
get { return _width * _height; }
}
}
class Program
{
static void Main()
{
var r = new Rectangle(4, 5);
Console.WriteLine("Area: " + r.Area);
}
}Effets secondaires des accesseurs set
Un accesseur set peut faire plus que stocker une valeur : il peut normaliser les données d’entrée, mettre à jour un état associé ou consigner les modifications.
using System;
class User
{
private string _email;
public string Email
{
get { return _email; }
set { _email = value.Trim().ToLower(); }
}
}
class Program
{
static void Main()
{
var u = new User();
u.Email = " Hello@Example.COM ";
Console.WriteLine("Normalized: " + u.Email);
}
}Calcul différé dans un accesseur get
Un accesseur get peut mettre en cache un résultat coûteux dans un champ de stockage lors de sa première demande.
using System;
class Report
{
private string _cached;
public string Content
{
get
{
if (_cached == null)
_cached = "Generated at runtime";
return _cached;
}
}
}
class Program
{
static void Main()
{
var r = new Report();
Console.WriteLine(r.Content);
Console.WriteLine(r.Content);
}
}Protection contre les états invalides
Combinez un champ de stockage avec de la logique pour qu’un objet reste toujours valide. Ici, l’accesseur set limite la valeur à un intervalle.
using System;
class Volume
{
private int _level;
public int Level
{
get { return _level; }
set
{
if (value < 0) _level = 0;
else if (value > 100) _level = 100;
else _level = value;
}
}
}
class Program
{
static void Main()
{
var v = new Volume();
v.Level = 150;
Console.WriteLine("Clamped: " + v.Level);
}
}Combinaison de données stockées et calculées
Une classe mélange souvent des propriétés stockées, avec des champs de stockage, et des propriétés calculées en lecture seule qui en dérivent.
using System;
class Employee
{
private string _first;
private string _last;
public string First { get { return _first; } set { _first = value; } }
public string Last { get { return _last; } set { _last = value; } }
public string FullName { get { return _first + " " + _last; } }
}
class Program
{
static void Main()
{
var e = new Employee { First = "Marie", Last = "Curie" };
Console.WriteLine(e.FullName);
}
}Notification des modifications
Les accesseurs set sont l’endroit naturel pour signaler les modifications des données, selon un modèle très utilisé dans les infrastructures d’interface utilisateur.
using System;
class Model
{
private int _count;
public int Count
{
get { return _count; }
set
{
if (_count != value)
{
_count = value;
Console.WriteLine("Count changed to " + _count);
}
}
}
}
class Program
{
static void Main()
{
var m = new Model();
m.Count = 1;
m.Count = 1;
m.Count = 2;
}
}Mise en pratique
Les propriétés complètes permettent à une classe de faire respecter ses invariants et d’exposer des données dérivées, le tout derrière une interface claire semblable à celle d’un champ.
using System;
class Thermostat
{
private double _target;
public double Target
{
get { return _target; }
set { _target = value < 10 ? 10 : value; }
}
public string Status { get { return _target >= 22 ? "Warm" : "Cool"; } }
}
class Program
{
static void Main()
{
var th = new Thermostat();
th.Target = 5;
Console.WriteLine(th.Target + " -> " + th.Status);
th.Target = 24;
Console.WriteLine(th.Target + " -> " + th.Status);
}
}Vérification rapide
Vérifiez votre compréhension des propriétés complètes.
Récapitulatif
Une propriété complète associe un champ de stockage privé à des accesseurs get/set explicites afin de permettre l’ajout d’une validation, d’une normalisation, d’une mise en cache ou de notifications de modification. Les propriétés calculées en lecture seule possèdent uniquement un accesseur get et aucun champ de stockage. Le mot-clé value contient l’affectation reçue dans un accesseur set.
using System;
class Demo
{
private int _n;
public int N
{
get { return _n; }
set { _n = value < 0 ? 0 : value; }
}
public int Doubled { get { return _n * 2; } }
}
class Program
{
static void Main()
{
var d = new Demo();
d.N = -5;
Console.WriteLine(d.N + ", " + d.Doubled);
}
}Questions Fréquemment Posées
La leçon « Propriétés complètes avec champs de stockage » est-elle gratuite ?
Oui — le texte complet de « Propriétés complètes avec champs de stockage » 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 « Propriétés complètes avec champs de stockage » ?
Ajoutez une logique aux accesseurs get et set. 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 2 sur 4.
Combien de temps prend la leçon « Propriétés complètes avec champs de stockage » ?
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
- Propriétés implémentées automatiquement
- Propriétés complètes avec champs de stockage
- Membres dont le corps est une expression
- Indexeurs