Menu
Coddy logo textTech

Indexeurs (this[])

Fait partie de la section Programmation Orientée Objet du Journey C# de Coddy. Leçon 37 sur 70.

Les indexeurs vous permettent d'accéder aux éléments de votre classe en utilisant une notation entre crochets semblable à celle des tableaux. Au lieu d'appeler une méthode comme collection.GetItem(0), vous pouvez écrire le plus intuitif collection[0].

Vous définissez un indexeur en utilisant le mot-clé this avec des crochets :

public class Sentence
{
    private string[] words;
    
    public Sentence(string text)
    {
        words = text.Split(' ');
    }
    
    public string this[int index]
    {
        get { return words[index]; }
        set { words[index] = value; }
    }
}

Maintenant, vous pouvez accéder aux mots naturellement :

Sentence s = new Sentence("Hello World");
Console.WriteLine(s[0]);  // Hello
s[1] = "C#";
Console.WriteLine(s[1]);  // C#

Les indexeurs ne sont pas limités aux entiers. Vous pouvez utiliser n'importe quel type comme paramètre d'index, ce qui les rend utiles pour un accès de type dictionnaire :

public string this[string key]
{
    get { return dictionary[key]; }
    set { dictionary[key] = value; }
}

Comme les propriétés, les indexeurs peuvent être en lecture seule (omettez le setter) ou inclure une logique de validation dans leurs accesseurs. Ils sont idéaux lorsque votre classe enveloppe une collection ou lorsque la notation entre crochets rend le code plus lisible.

challenge icon

Défi

Facile

Construisons une classe Playlist qui vous permet d’accéder aux chansons à l’aide d’une notation entre crochets intuitive, comme lorsque vous travaillez avec un tableau. Vous allez créer une liste de lecture dans laquelle les chansons peuvent être récupérées et mises à jour selon leur position à l’aide d’un indexeur.

Vous allez organiser votre code sur deux fichiers :

  • Playlist.cs : créez une classe Playlist dans l’espace de noms Music qui encapsule une collection interne de chansons et fournit un accès semblable à celui d’un tableau grâce à un indexeur. Votre liste de lecture doit comporter :
    • un tableau privé de chaînes de caractères pour stocker les titres des chansons ;
    • un constructeur qui accepte une chaîne de caractères contenant des titres de chansons séparés par des virgules et la divise en tableau interne ;
    • un indexeur utilisant this[int index] qui permet de récupérer et de définir les chansons à une position donnée ;
    • une propriété en lecture seule Count qui renvoie le nombre de chansons dans la liste de lecture ;
    • une méthode GetAllSongs() qui renvoie toutes les chansons réunies par " | ".
  • Program.cs : dans votre fichier principal, créez une liste de lecture à partir de l’entrée, puis utilisez l’indexeur pour accéder aux chansons et les modifier. Montrez à la fois la lecture des chansons par index et la mise à jour d’une chanson à une position donnée.

Vous recevrez trois entrées :

  • une liste de titres de chansons séparés par des virgules (par exemple, Song A,Song B,Song C) ;
  • un index à récupérer (entier) ;
  • un nouveau titre de chanson pour remplacer la chanson à ce même index.

Affichez la sortie dans ce format :

Total songs: {Count}
Song at index {index}: {song title}
After update: {GetAllSongs()}

Par exemple, si les entrées sont Rock Anthem,Jazz Vibes,Pop Hit, 1 et Blues Classic, la sortie doit être :

Total songs: 3
Song at index 1: Jazz Vibes
After update: Rock Anthem | Blues Classic | Pop Hit

Remarquez comment l’indexeur vous permet d’accéder à playlist[1] pour obtenir « Jazz Vibes », puis d’utiliser playlist[1] = "Blues Classic" pour la mettre à jour — ce qui est bien plus naturel que d’appeler des méthodes comme GetSongAt(1) ou SetSongAt(1, "Blues Classic") !

Essayez vous-même

using System;
using Music;

class Program
{
    public static void Main(string[] args)
    {
        // Lire les entrées
        string songList = Console.ReadLine();
        int index = Convert.ToInt32(Console.ReadLine());
        string newSong = Console.ReadLine();

        // TODO: Créer un objet Playlist à partir de songList

        // TODO: Afficher le nombre total de chansons en utilisant la propriété Count

        // TODO: Afficher la chanson à l'index donné en utilisant l'indexeur

        // TODO: Mettre à jour la chanson à l'index donné en utilisant l'indexeur

        // TODO: Afficher toutes les chansons après la mise à jour en utilisant GetAllSongs()
    }
}
quiz iconTestez-vous

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

Entraînez-vous par vous-même : Compilateur C# en ligne