Les références à des variables en C#?

En C++, je peux faire quelque chose comme ceci:

int i[10] = new int[10];
int *p = &i[5];

Puis, je peux toujours savoir que p pointe vers le 5ème élément de tableau int i, quelle que soit j'ai du contenu.

Est-il possible de faire la même chose en C#?

Je réalise que c'est probablement l'une des façons dont C# "protège" nous de nous-mêmes, donc je ne suis pas à la recherche d'une exacte equivelent, mais plutôt un concept similaire... c'est à dire être capable de se référer au contenu d'une autre variable, plutôt que de l'instance de la variable elle-même.

Voici mon cas d'utilisation je suis en train de penser. J'ai un tableau de chaînes de caractères. Je voudrais avoir un autre tableau de références à ces éléments du tableau. Quelque chose comme ceci (évidemment pas de code valide):

string[] s = new string[] { "one", "two", "three", "four", "five", "six" };
stringref[] sr = new stringref[] { &s[0], &s[1], &s[2], &s[3], &s[4], &s[5] };

Console.WriteLine(sr[1]); //== "two"
s[1] = "two point zero";
Console.WriteLine(sr[1]); //== "two point zero"

Certainement, ref paramets ce faire, et les paramètres de sortie vous permettent d'écrire à une variable spécifique. Mais qu'en non-paramètres? Pouvez-vous garder une ref? Pouvez-vous garder un tableau de références ou d'un dictionnaire?

Il semble comme si la capacité à le faire avec des paramètres est présent, il doit être un moyen de le faire sans eux.

Votre question semble confondre les références avec les pointeurs, et utilise plutôt la confusion des termes tels que "le contenu" d'une variable et la variable "lui-même". int *p = &i[5] attribue le adresse de la cinquième élément du tableau i à la variable p, qui est déclaré comme un pointeur vers un int. Les références ne sont pas les mêmes que les pointeurs. Je ne suis pas sûr au sujet de C#, mais à partir d'un C++ perspective, il n'est pas clair ce que vous demandez.
Je pense que c'est assez clair, car tout le monde a compris de quoi je parlais. Les références en C++ sont plus ou moins la même chose que les pointeurs, sauf que vous ne pouvez pas faire des maths ou de la ré-assigner. Peu importe, c# références ne sont pas les mêmes qu'en C++ références, et C# n'a pas de notion de pointeurs (lorsque vous n'utilisez pas le code unsafe), de sorte que les références sont ce que vous pouvez utiliser en C# depuis il n'y a rien d'autre. Aussi, j'ai dit "l'instance de la variable elle-même".

OriginalL'auteur Erik Funkenbusch | 2009-09-14