Sie möchten wissen, wo die Cookies sind. Sie haben ein Stück Papier mit der Aufschrift "A". Auf dem Papier ist in Bleistift geschrieben "123 Sesamstraße".
Das Papier ist kein Keks. Die Adresse ist kein Cookie. Das Papier enthält einen Verweis auf eine Adresse, die das Cookie enthält.
Sie erhalten ein zweites Stück Papier mit der Aufschrift "B". Auf diesem Stück Papier machen Sie eine Kopie des Inhalts von "A". Jetzt haben Sie zwei Zettel, beide sagen "123 Sesamstraße". Beide sagen Ihnen, wo die Cookies sind.
Du nimmst das Stück Papier "A" und löschst es. "A" bezieht sich nicht mehr auf den Standort der Cookies. B tut es immer noch.
Sie gehen davon aus, dass "b = a" bedeutet, auf B zu schreiben "für den Standort der Cookies, konsultieren Sie bitte Papier A". Aber das ist nicht, was "b = a" in C # bedeutet; Es bedeutet, dass eine Kopie der Referenz erstellt und nicht einen Alias der Referenz erstellt.
In C #, um einen Alias der Referenz zu erstellen, verwenden Sie das Schlüsselwort "ref", zum Verwechseln genug:
%Vor%In C # können Sie das nur tun, wenn Sie eine Methode aufrufen, die einen solchen ref-Parameter akzeptiert. Die gewünschte Funktion wird in C # nicht unterstützt, obwohl wir sie unterstützt haben:
%Vor%Haben Sie eine zwingende Notwendigkeit für diese Funktion? Wenn Sie das tun, lassen Sie mich bitte wissen, was es ist. Das wird uns helfen zu priorisieren, ob sich das Feature in einer hypothetischen zukünftigen Version von C # lohnt oder nicht.
UPDATE: Es ist geschafft! Diese Funktion wurde zu C # 7 hinzugefügt.
Sie setzen die Referenz auf null, Sie ändern das Objekt, auf das die Referenz verweist, nicht auf .
a
und b
sind zwei separate Referenzen, daher wird a
auf null
gesetzt bleibt b
unverändert (Think "pointer"), es bedeutet nur, dass a jetzt auf null
zeigt ("Nirgendwo ").
Boxen (was ist der Prozess, der hier passiert) ist ziemlich schön erklärt in der folgenden Artikel mit Beispielen, was im Speicher passiert.
Tags und Links .net c# reference-type