Heim >Backend-Entwicklung >C++ >Wie funktioniert C# Parameterübergang wirklich: Wert vs. Referenz?
In c#sind die Wertübertragung und Referenzübertragung die grundlegenden Konzepte, die Programmierer haben müssen. Obwohl nicht -originale Typen als übertragen angesehen werden, ist die Situation für bestimmte nicht -originalische Objekte (z. B. System.Drawing.image) nicht immer der Fall.
Beim Übergeben des Systems. Dies ist jedoch bei System.Drawing.image nicht der Fall. Die in der Anrufmethode vorgenommenen Änderungen verbreiten den Wiederherstellungsempfänger nicht, was zu Verwirrung führt.
Die Wahrheit von "Referenzübertragung"
Dieses Missverständnis ergibt sich aus Missverständnissen über die Bedeutung von Referenz. In C#wird das Objekt selbst nicht übertragen. Umgekehrt werden ihre Werte den Wert des Anfangsparameters übergeben. Für die Art der Referenz sind diese Werte Verweise auf das Objekt selbst. Daher sind alle Änderungen des Objekts selbst in der Anrufmethode für die Call Party sichtbar. Aber was wichtig ist, ist zu beachten, dass der Wert des Parameters selbst (dh der Verweis auf das Objekt) nicht gemäß Referenz übergeben wird. Dies bedeutet, dass, wenn den Parametern einen neuen Wert zugewiesen wird und ein anderes Objekt zitiert, die Call Party diese Änderung nicht sieht.
Lösung: Referenztransfer
Expression
Um sicherzustellen, dass der Anrufteil selbst sichtbar ist, muss der Anruf weitergegeben werden. Unabhängig davon, ob der Parameter der Werttyp oder der Referenztyp ist, kann dies durchoder Modifikatoren implementiert werden.
Durch die Verwendung dieser Modifikatoren werden die Parameter tatsächlich gemäß Referenz übergeben, und die in der Methode vorgenommenen Änderungen werden in der aufrufenden Partei widerspiegelt.
out
Beispiel ref
Um dieses Konzept zu erklären, betrachten Sie bitte das folgende Beispiel:
Im ersten Beispiel wird der Parameter von Wert übergeben, und die Änderungen am Parameter selbst sind für die Call Party nicht sichtbar. Im zweiten Beispiel wird die Formel Modifikator gemäß dem Referenzparameter angezeigt, der für den Parameter selbst sichtbar ist. Im dritten Beispiel werden die Parameter mit Referenz übergeben, die Änderungen am Objekt selbst sind jedoch sichtbar, da der Parameterwert eine Referenz auf das Objekt ist.
Schlussfolgerung
<code class="language-csharp">public void Foo(Image image) { // 此更改对调用方不可见。 image = Image.FromStream(...); } public void Foo(ref Image image) { // 此更改对调用方可见。 image = Image.FromStream(...); } public void Foo(Image image) { // 此更改对调用方可见。 image.RotateFlip(...); }</code>
c# Referenzübertragung ist ein subtiles Konzept, und sein Verhalten ist nicht immer wie von unserer Intuition erwartet. Das Verständnis der Differenz zwischen dem Übertragungsobjekt und dem Referenzübertragungswert ist für den erwarteten Code von wesentlicher Bedeutung. ref
Das obige ist der detaillierte Inhalt vonWie funktioniert C# Parameterübergang wirklich: Wert vs. Referenz?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!