Ich lese Jeffrey Richters CLR über C#, und darin sagt er mit ref-Parameter der Verweis selbst wird durch Wert übergeben. Dies macht Sinn für mich und scheint analagous zu Zeigern.
D.h. in C, wenn ich einen Zeiger in eine Funktion übergebe und dann den Zeiger über malloc zuweise, ändert sich der Zeiger, um auf den neuen Speicherplatz zu zeigen, aber ich weiß, da der Zeiger selbst eine Kopie ist, dass er den ursprünglichen Zeiger, der an die Funktion übergeben wurde, nicht neu zuweist. Um eine Änderung des Zeigers außerhalb der Funktion zu erreichen, muss ich einen Doppelzeiger verwenden.
In C#:
void Swap(ref Object a, ref Object b)
{
Object t = b;
b = a;
a =t ;
}
funktioniert. Das deutet für mich darauf hin, dass Verweise nicht wertbezogen sind. In Analogie zum obigen malloc nehme ich an, dass ich ein Objekt per Referenz übergeben und ihm ein neues Objekt zuweisen könnte und die Neuzuweisung außerhalb der Funktion bestehen bleiben würde.
Kann jemand meine Verwirrung aufklären?