Indexeurs multiples C #
Est-il possible d'avoir quelque chose comme ce qui suit:
class C
{
public Foo Foos[int i]
{
...
}
public Bar Bars[int i]
{
...
}
}
Si non, quelles sont certaines des façons d'y parvenir? Je sais que je pourrais faire les fonctions appelées getFoo(int i) et getBar(int i), mais j'espérais pour ce faire avec des propriétés.
source d'informationauteur smack0007
Vous devez vous connecter pour publier un commentaire.
Pas en C#, no.
Cependant, vous pouvez toujours revenir collections de propriétés, comme suit:
IList<T> a un indexeur, de sorte que vous pouvez écrire le code suivant:
Sur les lignes "de retour ...;" vous pouvez retourner tout implémente IList<T>, mais vous risquez de quoi retourner un wrapper en lecture seule autour de votre collection, consultez AsReadOnly() la méthode.
Ce à partir de C# 3.0
"La surcharge des indexeurs permet à une classe, struct ou de l'interface de déclarer plusieurs indexeurs, à condition que leurs signatures uniques au sein de cette classe, struct, ou de l'interface."
Tenter ma IndexProperty classe pour permettre plusieurs indexeurs dans la même classe
http://www.codeproject.com/Tips/319825/Multiple-Indexers-in-Csharp
Il y a un moyen.. si vous définissez 2 nouveaux types de permettre au compilateur de distinguer les deux signatures différentes...
Puis de l'appeler, il aurait fallu écrire:
Et si vous avez écrit une conversion implicite de l'opérateur:
alors vous ne avez même pas besoin de le faire pour l'utiliser, vous pouvez simplement écrire:
Même chose s'applique même si les deux indexeurs de retour différents types...
Si vous essayez de faire quelque chose comme ceci:
ensuite, vous devez définir les indexeurs sur le Foo et Bar classes elles-mêmes - c'est à dire mettre tous les Foo objets à l'intérieur de Foos, et de faire des Foos un type d'instance qui prend en charge l'indexation directement.
De démontrer à l'aide de tableaux pour les propriétés de membre (depuis qu'ils ont déjà le soutien des indexeurs):
vous permettrait de dire:
C# n'a pas de type de retour de la surcharge. Vous pouvez définir plusieurs indexeurs si leurs paramètres d'entrée sont différents.
Non tu ne peux pas faire. Seules les méthodes qui peuvent avoir leurs signatures ne diffèrent que par le type de retour sont des opérateurs de conversion. Les indexeurs doit avoir différents types de paramètres pour la compiler.