web-dev-qa-db-fra.com

Comment surcharger l'opérateur [] en C #

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

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

    public int GetValue(int index) => values[index];
}
276
Adam Tegen
public int this[int key]
{
    get => GetValue(key);
    set => SetValue(key, value);
}
705
Florian Greinacher

Je crois que c'est ce que vous recherchez:

Indexeurs (Guide de programmation C #)

class SampleCollection<T>
{
    private T[] arr = new T[100];
    public T this[int i]
    {
        get => 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]);
    }
}
64
William Brendel

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

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

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

Vous pouvez également ajouter un accesseur d'ensemble afin que l'indexeur devienne en lecture et en écriture plutôt qu'en lecture seule.

public int this[int index]
{
    get => GetValue(index);
    set => SetValue(index, value);
}

Si vous souhaitez indexer en utilisant un type différent, il vous suffit de modifier la signature de l'indexeur.

public int this[string index]
...
29
Jeff Yates
public int this[int index]
{
    get => values[index];
}
9
BFree