In -tiefter Diskussion der Objektübertragung in C#: Referenz und Wert
In C#war das Übertragungsobjekt für die Methode schon immer ein grundlegendes Konzept. Es wird allgemein angenommen, dass der nicht -Original -Typ mit Referenz übergeben wird.
Es wird jedoch eine Ausnahme angezeigt: Wenn das System des Systems.
die Wahrheit enthüllen: Wertübertragung und Referenzübertragung
Um dieses Phänomen zu verstehen, müssen wir die wahre Natur des vom Objekts in C#übertragenen Objekts klären. Das Objekt selbst wird nicht übertragen; Für den Referenztyp ist dieser Wert eine Referenz auf das tatsächliche Objekt, das Änderungen am zugrunde liegenden Objekt in der Anrufpartei ermöglicht.
Die subtile Differenz zwischen der Wertübertragung und der Referenzübertragung
verwendet c# "Wertübertragung" für alle Typen (einschließlich Referenztypen). Dies bedeutet, dass die Kopie des Objekts als Anfangswert des Parameters übergeben wird. Ändern des Parameterwerts wirkt sich nicht auf das ursprüngliche Objekt aus. Um die Attributwerte des Objekts in der Methode zu ändern, kann "Referenzübertragung" verwendet werden, indem Schlüsselwörter in der Parameteranweisung angegeben oder ref. In diesem Fall bezieht sich der Parameter effektiv auf die gleiche Speicherposition wie der Parameter, und die Änderungen an den Parametern sind im Aufruf sichtbar.
Beispielcode:
Schlussfolgerung Die Konzepte der "Wertübertragung" und "Referenzübertragung" in
c# unterscheiden sich von ihrem traditionellen Verständnis. Im Gegensatz dazu werden die Werte des Parameters entweder als Kopie (Werttyp) oder Referenz (Referenztyp) übertragen. Um den Attributwert des Objekts in der Methode zu ändern, können Sie die Schlüsselwörter für Out- oder REF als Referenz und Pass verwenden.<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>
Das obige ist der detaillierte Inhalt vonWie kann C# übertragen von Objekten an Methoden: Referenz oder Wert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!