Wenn Sie einen Typreferenztyp auf null setzen, wirkt sich dies nicht auf den kopierten Typ aus.

8

Warum ergibt das "0"?

%Vor%

Nicht b zeigt auf den gleichen Ort und die Einstellung a = null macht effektiv b null?

    
Priest 09.11.2011, 17:59
quelle

5 Antworten

28

Ein Bild sagt mehr als tausend Worte:

    
Olivier Jacot-Descombes 09.11.2011, 18:27
quelle
20

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.

    
Eric Lippert 09.11.2011 18:50
quelle
6

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 ").

    
BrokenGlass 09.11.2011 18:01
quelle
3

Boxen (was ist der Prozess, der hier passiert) ist ziemlich schön erklärt in der folgenden Artikel mit Beispielen, was im Speicher passiert.

    
Darin Dimitrov 09.11.2011 18:02
quelle
1

Hier ist eine Beschreibung, was passiert:

%Vor%     
abatishchev 09.11.2011 18:03
quelle

Tags und Links