Eventuali duplicati:
How do I assign by “reference” to a class field in c#?Come memorizzare un riferimento a un numero intero in C#?
Ciao a tutti - mi dicono come fare questo lavoro? Fondamentalmente, ho bisogno di un tipo di riferimento intero (int * funzionerebbe in 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'
}
}
Devo usare la boxe?
Modifica: Forse avrei dovuto essere più specifico. Sto scrivendo una classe BitAccessor, che consente semplicemente l'accesso a singoli bit. Ecco il mio utilizzo desiderata:
class MyGlorifiedInt
{
private int m_val;
...
public BitAccessor Bits {
return new BitAccessor(m_val);
}
}
Usage:
MyGlorifiedInt val = new MyGlorifiedInt(7);
val.Bits[0] = false; // Bits gets a new BitAccessor
Console.WriteLine(val); // outputs 6
Per BitAccessor per essere in grado di modificare m_val, ha bisogno di un riferimento ad esso. Ma voglio usare questo BitAccessor in molti posti, con solo un riferimento al numero intero desiderato.
Qual è il tuo obiettivo qui? Questo è fondamentalmente contrario all'idea del codice gestito; se potessi memorizzare un ref in 'foo' in qualche altra classe la cui durata non è legata a' main', cosa succede quando si esce da 'main' e il frame dello stack in cui' foo' vive viene distrutto? – tzaman
@tzaman, la mia modifica ha chiarito le mie intenzioni? @abatishchev - Mi piacerebbe, ma nessuna delle risposte fa esattamente quello che stavo cercando. Forse non è possibile. –
Perché i puntatori non sicuri fanno ciò che stai cercando? Hai persino menzionato che i puntatori farebbero il trucco se questo fosse in C++. –