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];
}
public int this[int key]
{
get => GetValue(key);
set => SetValue(key, value);
}
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]);
}
}
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]
...
public int this[int index]
{
get => values[index];
}