Nehmen Sie den folgenden Code ohne% ref
Schlüsselwort an, der die übergebene Variable offensichtlich nicht ersetzt, da sie als Wert übergeben wurde.
Damit diese Funktion wie erwartet funktioniert, fügt man wie gewohnt das Schlüsselwort ref
hinzu:
Nun bin ich perplex, warum Array-Member, wenn sie in Funktionen übergeben werden, implizit als Referenz übergeben werden. Sind Arrays keine Werttypen?
%Vor%Arrays werden nicht als Referenz übergeben. Verweise auf Arrays werden als Wert übergeben. Wenn es erforderlich ist, das Feld WHAT zu ändern, auf das eine übergebene Array-Variable verweist (z. B. um die Größe des Arrays zu ändern), muss die Variable als Verweis übergeben werden.
Eine gute Möglichkeit, sich daran zu erinnern ist:
Wenn Sie ein Array normal übergeben, übergeben Sie eine Sammlung von Variablen . Die Variablen in der Sammlung ändern sich nicht.
Wenn Sie ein Array mit "ref" übergeben, geben Sie einen neuen Namen für die Variable mit dem Array ein.
Wenn Sie ein Array-Element normal übergeben, übergeben Sie den Wert in der Variablen .
Wenn Sie ein Array-Element - eine Variable - mit "ref" übergeben, geben Sie einen neuen Namen für diese Variable ein .
Macht Sinn?
Können Sie sich vorstellen, ein 2-Millionen-Element-Array nach Wert zu übergeben? Stellen Sie sich nun vor, dass der Elementtyp decimal
ist. Sie müssen um 240MB 30,5175781MB Daten kopieren.
Wie von der MSDN-Referenz angegeben, sind Arrays Objekte ( System.Array ist der abstrakte Basistyp aller Arrays und Objekte werden als Referenz übergeben.
Abgesehen von grundlegenden Datentypen können Sie nichts anderes als Übergabe übergeben. Array ist eine Sammlung von grundlegenden Datentypen, die auch die Übergabe nach Wert bei der Sammlung ermöglichen, die mehrere Kopien der Sammlung erstellt, was die Leistung beeinträchtigen würde.
Tags und Links arrays c# parameter-passing pass-by-value pass-by-reference