Récapitulatif - Liste personnalisée
Fait partie de la section Programmation Orientée Objet du Journey C# de Coddy. Leçon 40 sur 70.
Défi
FacileConstruisons une classe CustomList qui réunit toutes les fonctionnalités avancées de ce chapitre — surcharge d’opérateurs, indexeurs, redéfinition de ToString() et méthodes d’extension — afin de créer une collection dont l’utilisation est naturelle et intuitive.
Vous organiserez votre code sur trois fichiers :
CustomList.cs: créez une classeCustomListdans l’espace de nomsCollectionsqui encapsule un tableau d’entiers interne et fournit des modes d’accès intuitifs. Votre liste doit comporter :- un tableau privé d’entiers pour stocker les éléments et une propriété
Count(avec un accesseur privé) indiquant le nombre d’éléments stockés ; - un constructeur qui accepte une capacité (un entier) et initialise le tableau interne à cette taille ;
- une méthode
Add(int item)qui ajoute un élément à la prochaine position disponible (s’il y a de la place) ; - un indexeur
this[int index]qui permet de récupérer et de définir des éléments par position ; - un opérateur
+surchargé qui combine deux CustomLists en une nouvelle liste contenant tous les éléments des deux listes (la capacité de la nouvelle liste doit être égale à la somme des deux nombres d’éléments) ; - une méthode
ToString()redéfinie qui renvoie les éléments au format[item1, item2, item3]— incluez uniquement les éléments jusqu’àCount, et non les emplacements vides.
- un tableau privé d’entiers pour stocker les éléments et une propriété
ListExtensions.cs: créez une classe statiqueListExtensionsdans l’espace de nomsCollectionsavec une méthode d’extension pour votre CustomList :Sum()— renvoie la somme de tous les éléments de la liste (jusqu’àCount).
Program.cs: dans votre fichier principal, créez deux CustomLists, ajoutez des éléments à chacune, puis montrez toutes les fonctionnalités utilisées ensemble — utilisez l’indexeur pour accéder aux éléments, combinez les listes avec l’opérateur+, affichez-les à l’aide deToString()et calculez la somme avec votre méthode d’extension.
Vous recevrez six entrées :
- trois entiers à ajouter à la première liste ;
- trois entiers à ajouter à la deuxième liste.
Créez la première liste avec une capacité de 5 et la deuxième avec une capacité de 3. Ajoutez les trois valeurs saisies à chaque liste respective.
Affichez le résultat dans ce format :
List 1: {ToString()}
List 2: {ToString()}
List 1[0]: {first item}
Combined: {ToString() of combined list}
Combined sum: {Sum()}Par exemple, si les entrées sont 10, 20, 30, 5, 15 et 25, le résultat devrait être :
List 1: [10, 20, 30]
List 2: [5, 15, 25]
List 1[0]: 10
Combined: [10, 20, 30, 5, 15, 25]
Combined sum: 105Remarquez comment tous les éléments fonctionnent ensemble — l’indexeur vous donne un accès similaire à celui d’un tableau, l’opérateur + vous permet de combiner les listes naturellement, ToString() fournit un affichage lisible et la méthode d’extension ajoute une fonctionnalité pratique. Voilà ce que permettent des classes bien conçues !
Essayez vous-même
using System;
using Collections;
class Program
{
public static void Main(string[] args)
{
// Lire six entiers
int a1 = Convert.ToInt32(Console.ReadLine());
int a2 = Convert.ToInt32(Console.ReadLine());
int a3 = Convert.ToInt32(Console.ReadLine());
int b1 = Convert.ToInt32(Console.ReadLine());
int b2 = Convert.ToInt32(Console.ReadLine());
int b3 = Convert.ToInt32(Console.ReadLine());
// TODO: Créer la première CustomList avec une capacité de 5
// TODO: Ajouter a1, a2, a3 à la première liste
// TODO: Créer la deuxième CustomList avec une capacité de 3
// TODO: Ajouter b1, b2, b3 à la deuxième liste
// TODO: Afficher List 1 en utilisant ToString()
// TODO: Afficher List 2 en utilisant ToString()
// TODO: Afficher List 1[0] en utilisant l'indexeur
// TODO: Combiner les listes en utilisant l'opérateur + et afficher le résultat
// TODO: Afficher la somme de la liste combinée en utilisant la méthode d'extension Sum()
}
}
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 UtilisateurLogique du système d'empruntLINQ pour la rechercheInterface Console / Interface d'administrationTests unitaires (NUnit/xUnit)Entraînez-vous par vous-même : Compilateur C# en ligne