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 rassemble toutes les fonctionnalités avancées de ce chapitre - surcharge d'opérateurs, indexeurs, redéfinition de ToString() et méthodes d'extension - pour créer une collection dont l'utilisation semble naturelle et intuitive.
Vous organiserez votre code sur trois fichiers :
CustomList.cs: Créez une classeCustomListdans l'espace de nomsCollectionsqui enveloppe un tableau d'entiers interne et fournit des modèles d'accès intuitifs. Votre liste doit avoir :- Un tableau d'entiers privé pour stocker les éléments et une propriété
Count(avec un accesseur set privé) suivant le nombre d'éléments stockés - Un constructeur qui accepte une capacité (entier) et initialise le tableau interne à cette taille
- Une méthode
Add(int item)qui ajoute un élément à la position suivante disponible (s'il y a de la place) - Un indexeur
this[int index]qui permet d'obtenir et de définir des éléments par position - Un opérateur
+surchargé qui combine deux CustomLists en une nouvelle contenant tous les éléments des deux (la capacité de la nouvelle liste doit être la somme des deux comptes) - Une méthode
ToString()redéfinie qui renvoie les éléments au format[item1, item2, item3]- n'incluez que les éléments jusqu'àCount, pas les emplacements vides
- Un tableau d'entiers privé 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 démontrez toutes les fonctionnalités fonctionnant ensemble - utilisez l'indexeur pour accéder aux éléments, combinez les listes avec l'opérateur+, affichez en utilisantToString(), et calculez la somme en utilisant 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 d'entrée à chaque liste respective.
Affichez la sortie 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, la sortie 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 toutes les pièces fonctionnent ensemble - l'indexeur vous donne un accès de type tableau, l'opérateur + vous permet de combiner des listes naturellement, ToString() fournit une sortie lisible, et la méthode d'extension ajoute une fonctionnalité utilitaire. C'est à cela que ressemblent 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 Utilisateur