Membres à corps d'expression
Fait partie de la section Programmation Orientée Objet du Journey C# de Coddy — leçon 14 sur 70.
Les membres expression-bodied fournissent une syntaxe concise pour les membres qui ne contiennent qu'une seule expression. Au lieu d'écrire des corps de méthode ou de propriété complets avec des accolades, vous utilisez la syntaxe de flèche =>.
Pour les méthodes qui retournent une seule expression, vous pouvez remplacer le corps entier :
// Méthode traditionnelle
public int Add(int a, int b)
{
return a + b;
}
// Méthode avec corps d'expression
public int Add(int a, int b) => a + b;Cette syntaxe fonctionne également pour les propriétés en lecture seule, que vous avez déjà brièvement aperçues :
public class Circle
{
public double Radius { get; set; }
public double Area => Math.PI * Radius * Radius;
public double Circumference => 2 * Math.PI * Radius;
}Vous pouvez également utiliser des corps d'expression pour les accesseurs (getters) et les mutateurs (setters) de propriété individuellement :
private string name;
public string Name
{
get => name;
set => name = value.Trim();
}Même les constructeurs peuvent utiliser cette syntaxe lorsqu'ils contiennent une seule instruction :
public class Person
{
public string Name { get; }
public Person(string name) => Name = name;
}Les membres expression-bodied rendent votre code plus lisible lorsque la logique est simple. Utilisez-les pour des opérations simples, mais conservez les corps traditionnels lorsque vous avez besoin de plusieurs instructions ou d'une logique complexe.
Défi
FacileConstruisons un calculateur de prix de produits qui met en avant la puissance des membres expression-bodied pour écrire un code propre et concis.
Vous allez créer deux fichiers pour organiser votre code :
Product.cs: Définissez une classeProductdans l'espace de nomsStore. Cette classe doit illustrer divers membres expression-bodied :- Une propriété auto-implémentée
Name(string) etBasePrice(decimal) - Un constructeur expression-bodied qui initialise les deux propriétés
- Une propriété en lecture seule expression-bodied
TaxAmountqui calcule 10 % du prix de base - Une propriété en lecture seule expression-bodied
TotalPricequi retourne le prix de base plus le montant de la taxe - Une méthode expression-bodied
GetDiscount(decimal percentage)qui retourne le montant de la remise (prix de base multiplié par le pourcentage divisé par 100) - Une méthode expression-bodied
GetFinalPrice(decimal discountPercentage)qui retourne le prix total moins la remise
- Une propriété auto-implémentée
Program.cs: Dans votre fichier principal, créez unProducten utilisant les valeurs d'entrée, puis affichez le détail de son prix.
Vous recevrez trois entrées :
- Nom du produit
- Prix de base
- Pourcentage de remise à appliquer
Affichez les détails de la tarification dans ce format :
Product: {Name}
Base Price: {BasePrice}
Tax (10%): {TaxAmount}
Total Price: {TotalPrice}
Discount ({percentage}%): {discountAmount}
Final Price: {finalPrice}Par exemple, si les entrées sont Laptop, 1000, et 15, la sortie devrait être :
Product: Laptop
Base Price: 1000
Tax (10%): 100
Total Price: 1100
Discount (15%): 150
Final Price: 950N'oubliez pas d'utiliser la syntaxe de flèche => pour tous les membres qui contiennent une seule expression. Cela permet de garder votre code propre et lisible !
Aide-mémoire
Les membres expression-bodied utilisent la syntaxe de flèche => pour les membres contenant une seule expression, offrant une alternative concise aux corps de méthodes et de propriétés traditionnels.
Méthodes expression-bodied :
// Méthode traditionnelle
public int Add(int a, int b)
{
return a + b;
}
// Méthode expression-bodied
public int Add(int a, int b) => a + b;Propriétés en lecture seule expression-bodied :
public class Circle
{
public double Radius { get; set; }
public double Area => Math.PI * Radius * Radius;
public double Circumference => 2 * Math.PI * Radius;
}Accesseurs (getters) et mutateurs (setters) de propriété expression-bodied :
private string name;
public string Name
{
get => name;
set => name = value.Trim();
}Constructeurs expression-bodied :
public class Person
{
public string Name { get; }
public Person(string name) => Name = name;
}Utilisez les membres expression-bodied pour les opérations simples. Pour les instructions multiples ou une logique complexe, utilisez les corps traditionnels.
Essayez vous-même
using System;
using Store;
class Program
{
public static void Main(string[] args)
{
// Lire les entrées
string name = Console.ReadLine();
decimal basePrice = Convert.ToDecimal(Console.ReadLine());
decimal discountPercentage = Convert.ToDecimal(Console.ReadLine());
// TODO: Créer un objet Product en utilisant les valeurs d'entrée
// TODO: Calculer le montant de la remise en utilisant la méthode GetDiscount
// TODO: Calculer le prix final en utilisant la méthode GetFinalPrice
// TODO: Afficher les détails de la tarification dans le format requis :
// Product: {Name}
// Base Price: {BasePrice}
// Tax (10%): {TaxAmount}
// Total Price: {TotalPrice}
// Discount ({percentage}%): {discountAmount}
// Final Price: {finalPrice}
}
}
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