A volte confonde le idee.... provo a parlarne in modo semplice:
Ipotizziamo di chiamare dei metodi
value type (structure)
void test(int i)
{
//se cambi i non cambia nel chiamante
}
void test(ref int i)
{
//se cambi i cambia anche nel chiamante
}
reference type (class)
void test(object o)
{
//se cambi il valore di o non cambia nel chiamante
//se cambi il valore di una proprietà di o questa è dell'oggetto puntato da o, e quindi del chiamante
}
void test(ref object o)
{
//se cambi o questo cambia nel chiamante
//se cambi una proprietà di o cambia nel chiamante
}