Possible en double:
How do I assign by “reference” to a class field in c#?Comment stocker une référence à un entier en C#?
Bonjour à tous - me dire comment faire ce travail? Fondamentalement, je besoin d'un type de référence entier (int * travaillerait en C++)
class Bar
{
private ref int m_ref; // This doesn't exist
public A(ref int val)
{
m_ref = val;
}
public void AddOne()
{
m_ref++;
}
}
class Program
{
static void main()
{
int foo = 7;
Bar b = new Bar(ref foo);
b.AddOne();
Console.WriteLine(foo); // This should print '8'
}
}
Dois-je utiliser la boxe?
Modifier: Peut-être que j'aurais dû être plus précis. J'écris une classe BitAccessor, qui permet simplement d'accéder à des bits individuels. Voici mon utilisation souhaitée:
class MyGlorifiedInt
{
private int m_val;
...
public BitAccessor Bits {
return new BitAccessor(m_val);
}
}
Utilisation:
MyGlorifiedInt val = new MyGlorifiedInt(7);
val.Bits[0] = false; // Bits gets a new BitAccessor
Console.WriteLine(val); // outputs 6
Pour BitAccessor pour pouvoir modifier m_val, il a besoin d'une référence. Mais je veux utiliser ce BitAccessor de nombreux endroits, avec juste une référence à l'entier désiré.
Quel est votre objectif ici? Cela va fondamentalement à l'encontre de l'idée du code managé; si vous pouviez stocker une référence à 'foo' dans une autre classe dont la durée de vie n'est pas liée à' main', que se passe-t-il lorsque 'main' se termine et que le cadre de pile où' foo' vit est détruit? – tzaman
@tzaman, est-ce que mon édition a éclairci mes intentions? @abatishchev - Je voudrais, mais aucune des réponses ne fait tout à fait ce que je cherchais. Peut-être que ce n'est pas possible. –
Pourquoi les pointeurs dangereux ne feraient-ils pas ce que vous cherchez? Vous avez même mentionné que les pointeurs feraient l'affaire si c'était en C++. –