1, Wertübergabe
Wert wird nach Wert übergeben. Das Wesentliche bei der Übergabe des Referenztyps nach Wert ist die Übergabe des Werts die Instanz selbst, also die übergebene Es handelt sich um eine Instanzkopie und hat keinen Einfluss auf die ursprüngliche Instanz. Wenn der Parameter ein Referenztyp ist, ist der „Wert“ eine Objektreferenz, sodass eine Kopie der Referenzadresse übergeben wird ändert den Referenzpunkt des ursprünglichen Objekts.
String ist ein Referenztyp. Die Auswirkung der Übergabe von Zeichenfolgen nach Wert ist die gleiche wie die Auswirkung der Übergabe von Werten nach Wert. String ist hier etwas Besonderes.
Wenn beim Aufrufen einer Methode ein Parameter übergeben wird, erstellt die Methode zunächst eine Variable im Stapel entsprechend dem Parametertyp und weist dann der Variablen den Wert des Parameters zu. Daher bleiben die Übertragungsinstanzen des Werttyps und des Zeichenfolgentyps unverändert und die Übertragungsadresse des Referenztyps ändert sich. Wenn es jedoch als Referenz übergeben wird, wird die Adresse übergeben und der Wert der Instanz ändert sich.
2. Referenzübergabe
Ref und out werden per Referenz übergeben, unabhängig davon, ob es sich um einen Werttyp oder einen Referenztyp handelt. Die Übergabe per Referenz muss mit dem Schlüsselwort ref oder out geändert werden Vor dem Passieren muss zuerst die Initialisierung angezeigt werden, was für out nicht erforderlich ist. Das heißt, der Parameter, der ref verwendet, muss ein tatsächliches Objekt sein und darf nicht auf null zeigen, während der Parameter, der out verwendet, ein Objekt akzeptieren kann, das auf null zeigt, und dann muss das Objekt innerhalb der aufrufenden Methode materialisiert werden.
Werttypen werden nicht eingerahmt, wenn sie als Referenz übergeben werden.
Übergabe als Referenz. Übergeben wird nicht der Wert des Parameters selbst, sondern die Adresse des Parameters. Wenn der Parameter ein Werttyp ist, wird die Adresse des Werttyps übergeben. Wenn der Parameter ein Referenztyp ist, wird die Adresse der Objektreferenz übergeben. Das Ergebnis der Übergabe eines Referenztyps per Referenz ist dasselbe wie die Übergabe eines Werts .
int i = 100;//Ref需要显示初始化 int j;//out不需要显示初始化 Fun(ref i,out j); void Fun(ref int i,out int j) { j = 100;//out必须完成对象的实体化 }
lautet wie folgt:
private void Awake() { SenderTest st = GetComponent<SenderTest>();//实例化类的对象 st.i = 100; int i = 100; string s = "100"; ChangeValue(i,s, st);//值类型,引用类型,按值传递 print("value "+i+s+st.i);//value 100 100 200 ChangeValue(ref i, ref s, ref st);//值类型,引用类型,按引用传递 print("ref "+i + s + st.i);//ref 200 200 200 } void ChangeValue(int i, string s, SenderTest st) { i = 200; s = "200"; st.i = 200; } void ChangeValue(ref int i, ref string s, ref SenderTest st) { i = 200; s = "200"; st.i = 200; }
Verwandte Artikel:
PHP-Erweiterung mit C/C++ schreiben
Das obige ist der detaillierte Inhalt vonC#-Referenztypen: Vergleich zwischen Wertübergabe und Referenzübergabe. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!