Champs vs Propriétés
Fait partie de la section Programmation Orientée Objet du Journey C# de Coddy — leçon 6 sur 70.
Les champs sont des variables déclarées directement dans une classe. Les propriétés sont des membres qui fournissent un accès contrôlé aux champs en utilisant des accesseurs get et set.
Les champs stockent les données directement
public class Person
{
// Champs - stockage direct de variables
private string name;
private int age;
}Les propriétés fournissent un accès contrôlé avec get et set
public class Person
{
private string name;
// Propriété avec champ de stockage
public string Name
{
get { return name; }
set { name = value; }
}
}Propriétés auto-implémentées (raccourci)
public class Person
{
// Propriété auto-implémentée
public string Name { get; set; }
public int Age { get; set; }
}Les propriétés peuvent inclure une logique de validation
public class Person
{
private int age;
public int Age
{
get { return age; }
set
{
if (value >= 0 && value <= 120)
age = value;
}
}
}Propriété en lecture seule (uniquement l'accesseur get)
public class Circle
{
private double radius;
public double Radius
{
get { return radius; }
}
// Propriété calculée en lecture seule
public double Area
{
get { return Math.PI * radius * radius; }
}
}Les champs sont généralement privés et accessibles via des propriétés. Les propriétés vous permettent d'ajouter de la logique, de la validation et du contrôle sur la manière dont les données sont consultées ou modifiées. Les propriétés auto-implémentées sont pratiques lorsque vous n'avez pas besoin de logique supplémentaire.
Défi
MoyenCréez une classe BankAccount qui démontre la différence entre les champs et les propriétés :
- Un champ privé
balancepour stocker le solde du compte - Une propriété auto-implémentée
AccountName - Une propriété en lecture seule
Balancequi renvoie le champ balance - Des méthodes
DepositetWithdrawqui modifient le champ privé
Aide-mémoire
Les champs sont des variables déclarées directement dans une classe, tandis que les propriétés fournissent un accès contrôlé aux champs à l'aide d'accesseurs get et set.
Les champs stockent les données directement :
public class Person
{
private string name;
private int age;
}Les propriétés fournissent un accès contrôlé avec get et set :
public class Person
{
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
}Propriétés auto-implémentées (raccourci) :
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}Propriétés avec logique de validation :
public int Age
{
get { return age; }
set
{
if (value >= 0 && value <= 120)
age = value;
}
}Propriété en lecture seule (uniquement l'accesseur get) :
public double Area
{
get { return Math.PI * radius * radius; }
}Les champs sont généralement privés et accessibles via des propriétés. Les propriétés vous permettent d'ajouter de la logique, de la validation et du contrôle sur la manière dont les données sont accédées ou modifiées.
Essayez vous-même
using System;
class Program
{
static void Main()
{
string accountName = Console.ReadLine();
decimal initialBalance = decimal.Parse(Console.ReadLine());
decimal depositAmount = decimal.Parse(Console.ReadLine());
BankAccount account = new BankAccount(accountName, initialBalance);
Console.WriteLine($"Account: {account.AccountName}");
Console.WriteLine($"Initial Balance: ${account.Balance}");
account.Deposit(depositAmount);
Console.WriteLine($"After Deposit: ${account.Balance}");
string result = account.Withdraw(2000);
Console.WriteLine($"Withdraw attempt: {result}");
Console.WriteLine($"Final Balance: ${account.Balance}");
}
}Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Programmation Orientée Objet
1Fondamentaux de la POO
Fichiers externesEspaces de noms et directivesIntro aux classes et objetsLe mot-clé 'this'Méthodes et paramètresChamps vs PropriétésConstructeursInitialiseurs d'objetsRécapitulatif - Calculatrice simple4Héritage
Syntaxe de base de l'héritage (:)Le mot-clé 'base'Mots-clés Virtual & OverrideClasses scelléesLa classe de base 'object'Récapitulatif - Hiérarchie des employés7Fonctionnalités avancées
Surcharge d'opérateursIndexeurs (this[])Redéfinition de ToString()Méthodes d'extensionRécapitulatif - Liste personnalisée10Patrons de conception - Partie 1
Introduction aux patrons de conceptionSingleton Thread-SafePatron FabriquePatron Observateur (Événements)Patron Stratégie2Propriétés et membres statiques
Propriétés auto-implémentéesPropriétés en lecture/écriture seuleChamps et méthodes statiquesClasses statiquesMembres à corps d'expression5Polymorphisme & Interfaces
Polymorphisme : Compilation vs ExécutionInterface vs Classe AbstraiteInterfaces MultiplesInterfaces ExplicitesUpcasting & DowncastingRécapitulatif - Calculateur de Formes8Concepts avancés de la POO
Composition plutôt qu'héritageGénériques (Classes et Méthodes)Délégués et ÉvénementsAttributs et RéflexionIDisposable et l'instruction usingBases de l'Injection de Dépendances11Patrons de conception, Partie 2
Patron CommandePatron AdaptateurPatron DécorateurPatron Méthode TemplatePatron ÉtatPatron Composite3Architecture des classes
Données d'instance vs statiquesMots-clés 'readonly' & 'const'Champs de supportRécapitulatif - Gestionnaire de compte bancaire6Encapsulation
Modificateurs d'accèsPropriétés pour l'encapsulationImplémentation du masquage de donnéesPatterns d'immuabilitéRécapitulatif - Dossiers d'étudiants12Projet : Système de gestion de bibliothèque
Structure du projetModèles Livre et Utilisateur