2016-01-31 2 views
1

C# vous permet de remplacer l'indexeur de tableau de la propriété this, comme ceci:propriété d'accès en C# via indexeur

int this[int index] 
{ 
    get { return _hidden[index]; } 
    set { _hidden[index] = value; } 
} 
int[] _hidden; 

Cependant, je voudrais d'accéder à une propriété différente nommée par l'intermédiaire d'un index, comme si :

int Hidden[int index] 
{ 
    get { return _hidden[index]; } 
    set { _hidden[index] = value; } 
} 
int[] _hidden; 

Je sais que je pourrais travailler autour de cela en utilisant comme paramètre régulier, comme tel:

int Hidden(int index) 
{ 
    return _hidden[index]; 
} 
void Hidden(int index, int value) 
{ 
    _hidden[index] = value; 
} 
int[] _hidden; 

Cependant, je perds la commodité d'une propriété nommée de cette façon, et je retourne essentiellement à des méthodes get/set nommées publiquement. De plus, comme je suis dans les coulisses d'accéder à des membres d'un tableau, la notation d'indexation de tableau a plus de sens conceptuellement pour ma situation.

Y at-il un moyen de combiner la commodité de l'opérateur avec l'indexeur de tableau?

+1

Seulement en retournant un objet qui a un indexeur, sinon non –

+0

Que suggéreriez-vous alors? Dois-je retourner un tableau directement, ou créer une classe qui ressemble à un tableau et le retourner? –

+0

Peut-être que je me trompe, mais ne devriez-vous pas créer un indexeur dans la classe cachée? Ensuite, vous pourrez utiliser: 'your_object.Hidden [i]' – Uriil

Répondre

2

Une propriété ne peut pas se comporter comme un élément indexable, à moins qu'elle n'en renvoie une. Vous avez deux options:

  • retour un tableau, une liste ou un autre élément que vous avez déjà dans les coulisses
  • créer un objet qui fournit un indexeur et renvoie les valeurs

Le premier est simple, mais cela permettra de changer le tableau/liste/peu importe. Le second ne peut avoir qu'un getter, donc il peut être fait en lecture seule.

Je suis assez sûr qu'il ne serait pas beaucoup de lignes de code pour faire un modèle générique avec indexer et getter pour encapsuler l'objet réel stockant les valeurs si cela est nécessaire.