Partager via


Conception de propriétés indexées

Mise à jour : novembre 2007

Les propriétés indexées permettent un accès de type tableau à des groupes d'éléments (par exemple, les caractères d'une chaîne ou les bits d'un BitArray). Les propriétés indexées, appelées indexeurs ou propriétés par défaut, diffèrent des propriétés normales en cela qu'elles prennent des paramètres indiquant l'élément du groupe auquel il faut accéder. L'implémentation d'une propriété indexée doit être aussi simple que possible car les indexeurs sont souvent utilisés dans les boucles. Les instructions suivantes garantissent que vos types contiennent des index bien conçus là où il convient.

Évitez de créer des propriétés indexées avec plusieurs paramètres.

Si un indexeur exige plusieurs paramètres, déterminez si la propriété représente vraiment un accès à une collection logique. Si ce n'est pas le cas, utilisez à la place des méthodes et pensez à choisir un nom de méthode qui commence par Get ou Set.

Évitez les indexeurs comportant des types de paramètre autres que System.Int32, System.Int64, System.String, System.Object, des énumérations ou des paramètres de type générique.

Si votre conception nécessite d'autres types de paramètres, il est important de déterminer si le membre représente réellement un accès à une collection logique. Si ce n'est pas le cas, utilisez à la place des méthodes et pensez à choisir un nom de méthode qui commence par Get ou Set.

Utilisez le nom Item pour les propriétés indexées à moins qu'il n'existe un nom plus approprié (par exemple, consultez la propriété System.String.Chars (System.Int32)).

L'attribut IndexerNameAttribute peut être utilisé pour personnaliser le nom d'un indexeur.

Ne fournissez pas à la fois un indexeur et des méthodes qui sont équivalents d'un point de vue sémantique.

Dans l'exemple de code suivant, l'indexeur doit être changé en méthode.

<System.Runtime.CompilerServices.IndexerNameAttribute("PositionsHeld")> _
    Public Property Item (skillId as Integer) as JobInfoCollection


...


Public Function GetPositions(skillId as Integer, _
    minJobLevel as Integer) _
   as JobInfoCollection
[System.Runtime.CompilerServices.IndexerNameAttribute("PositionsHeld")]
    public JobInfoCollection this [int skillId]


...


public JobInfoCollection GetPositions(int skillId, int minJobLevel)

Ne fournissez pas plusieurs familles d'indexeurs surchargés dans un même type.

Certains compilateurs, tels que le compilateur C#, appliquent cette instruction.

La prise en charge de plusieurs ensembles d'indexeurs n'est pas assurée par certains langages. Si vous les utilisez, certains développeurs ne seront pas en mesure d'accéder à ces membres.

N'utilisez pas de propriétés indexées non définies par défaut.

Certains compilateurs, tels que le compilateur C#, appliquent cette instruction. Les propriétés indexées non définies par défaut ne sont pas prises en charge par tous les langages de programmation. Si vous les utilisez, certains développeurs ne seront pas en mesure d'accéder à ces membres.

Portions Copyright 2005 Microsoft Corporation. Tous droits réservés.

Portions Copyright Addison-Wesley Corporation. Tous droits réservés.

Pour plus d'informations sur les instructions de conception, consultez le livre « Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries » de Krzysztof Cwalina et Brad Abrams, publié par Addison-Wesley, 2005.

Voir aussi

Concepts

Conception des propriétés

Autres ressources

Instructions de conception des membres

Instructions de conception pour le développement de bibliothèques de classes