Indexeurs C# : faire agir les objets comme des tableaux
Un indexeur permet d'indexer un objet comme un tableau. Quand vous définissez un indexeur pour une classe, elle se comporte comme un tableau virtuel. Vous accédez alors à l'instance avec l'opérateur d'accès tableau [ ].
Syntaxe
Indexeur unidimensionnel :
type_élément this[int index]
{
get { /* retourne valeur à l'index */ }
set { /* définit valeur à l'index */ }
}
Utilisation des indexeurs
Similaire aux propriétés, mais :
- Propriétés : accèdent à un membre de données spécifique
- Indexeurs : accèdent à une valeur particulière de l'instance (découpent l'instance en parties indexées)
Pas de nom, utilise le mot-clé this (référence à l'instance).
Exemple : liste de noms indexée
using System;
namespace ApplicationIndexeur
{
class NomsIndexés
{
private string[] listeNoms = new string[taille];
static public int taille = 10;
public NomsIndexés()
{
for (int i = 0; i < taille; i++)
listeNoms[i] = "N.D.";
}
public string this[int index]
{
get
{
string tmp;
if (index >= 0 && index <= taille - 1)
tmp = listeNoms[index];
else
tmp = "";
return tmp;
}
set
{
if (index >= 0 && index <= taille - 1)
listeNoms[index] = value;
}
}
static void Main(string[] args)
{
NomsIndexés noms = new NomsIndexés();
noms[0] = "Zara";
noms[1] = "Riz";
noms[2] = "Nuha";
noms[3] = "Asif";
noms[4] = "Davinder";
noms[5] = "Sunil";
noms[6] = "Rubic";
for (int i = 0; i < NomsIndexés.taille; i++)
Console.WriteLine(noms[i]);
Console.ReadKey();
}
}
}
Résultat :
Zara
Riz
Nuha
Asif
Davinder
Sunil
Rubic
N.D.
N.D.
N.D.
Indexeurs surchargés
Les indexeurs peuvent être surchargés avec plusieurs paramètres de types différents. Pas nécessairement des entiers (ex: string).
Exemple : indexeur par nom
// Dans la même classe...
public int this[string nom]
{
get
{
int index = 0;
while (index < taille)
{
if (listeNoms[index] == nom)
return index;
index++;
}
return index; // non trouvé = taille
}
}
// Utilisation
Console.WriteLine(noms["Nuha"]); // Affiche 2
Résultat ajouté : 2
Cas d'usage courants
- Collections personnalisées (List, Dictionary-like)
- Accès à des données matricielles ou grilles
- Wrappers sur tableaux ou listes internes
- API fluides avec indexation sémantique
Bonnes pratiques
- Validez les bornes dans
get/set - Lancez
IndexOutOfRangeExceptionou retournez valeur par défaut selon sémantique - Documentez le comportement pour index invalide
- Envisagez
IEnumerablepour itération standard
Langue C
- C# Hello World — Construire votre première application C#
- Comprendre les mots-clés et identificateurs C# : règles, listes et bonnes pratiques
- Maîtriser les variables C# et types de données primitifs : guide complet
- Opérateurs C# — Guide complet des opérateurs en C#
- Maîtriser les opérateurs bit à bit et de décalage en C# : Guide complet
- Fondamentaux C# : Entrées et sorties essentielles
- Expressions, instructions et blocs C# : Guide complet avec exemples pratiques
- Maîtriser les commentaires C# : Types, bonnes pratiques et documentation XML
- Maîtriser l'instruction Switch C# : Syntaxe, exemples et bonnes pratiques