234 votes

Comment puis-je la surcharge de l'opérateur [] en C#

Je voudrais ajouter un opérateur à une classe. J'ai actuellement un GetValue() la méthode que je voudrais remplacer par un opérateur [].

class A
{
    private List<int> values = new List<int>();

    public int GetValue(int index)
    {
        return values[index];
    } 
}

613voto

Florian Greinacher Points 6769
public int this[int key]
{
    get
    {
        return GetValue(key);
    }
    set
    {
        SetValue(key,value);
    }
}

57voto

William Brendel Points 15453

Je crois que c'est ce que vous cherchez:

Les Indexeurs (Guide De Programmation C#)

class SampleCollection<T>
{
    private T[] arr = new T[100];
    public T this[int i]
    {
        get
        {
            return arr[i];
        }
        set
        {
            arr[i] = value;
        }
    }
}

// This class shows how client code uses the indexer
class Program
{
    static void Main(string[] args)
    {
        SampleCollection<string> stringCollection = 
            new SampleCollection<string>();
        stringCollection[0] = "Hello, World";
        System.Console.WriteLine(stringCollection[0]);
    }
}

26voto

Jeff Yates Points 36725

L'opérateur [] est appelé un indexeur. Vous pouvez fournir des indexeurs qui prennent un entier, une chaîne, ou tout autre type que vous souhaitez utiliser comme une clé. La syntaxe est simple, en suivant les mêmes principes que les accesseurs de propriété.

Par exemple, dans votre cas où un int est la clé ou l'indice:

public int this[int index]
{
  get
  {
     return GetValue(index);
  }
}

Vous pouvez également ajouter un accesseur set de sorte que l'indexation devient de lire et d'écrire plutôt que de simplement en lecture seule.

public int this[int index]
{
  get
  {
     return GetValue(index);
  }

  set
  {
    SetValue(index, value);
  }
}

Si vous voulez de l'index à l'aide d'un type différent, il suffit de changer la signature de l'indexeur.

public int this[string index]
...

7voto

BFree Points 46421
public int this[int index]
    {
        return values[index];
    }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by: