Heim  >  Artikel  >  Backend-Entwicklung  >  C#-Schwierigkeiten werden nacheinander gelöst (1): Ref-Parameterübergabe

C#-Schwierigkeiten werden nacheinander gelöst (1): Ref-Parameterübergabe

黄舟
黄舟Original
2016-12-22 14:02:401662Durchsuche

Im Allgemeinen werden die Parameter einer Methode als Wert übergeben, d. h. ein Objekt wird als Parameter an die Methode übergeben und das Objekt wird im Speicherbereich des Zeigers gespeichert, in dem sich das Parameterobjekt befindet (beschrieben in C), das heißt, das Objekt erstellt an dieser Stelle eine Kopie, und wenn die Methode endet, wird die Kopie zerstört. Die Verwendung dieser Übertragungsmethode macht die überwiegende Mehrheit der täglichen Methodenparameterübertragungen aus.

Eine weitere Situation ist die Referenzübergabe, die sich von der Wertübergabe unterscheidet. Wenn das Objekt an eine Methode übergeben wird, hat es keine Auswirkung auf die Methodenparameter. Es wird jedoch die Methode zurückgegeben, die vom ursprünglichen Parameterwert beeinflusst wird Das heißt, MethodInstance(ref _refValue) ruft die Methode Method(ref _arg) auf, aber _refValue hat keine Auswirkung auf Method und das von _arg beeinflusste Ergebnis wird weiterhin zurückgegeben. Es ist auch denkbar, dass _arg vor der Verwendung zugewiesen werden muss.

Beispiel:

Ein weiterer Fall ist die Übergabe per Referenz, die sich von der Übergabe per Wert unterscheidet. Wenn das Objekt an die Methode übergeben wird, hat es keine Auswirkung auf die Methodenparameter Die zurückgegebene Methode ist der Wert des ursprünglichen Parameters, d. h. MethodInstance(ref _refValue) ruft die Methode Method(ref _arg) auf, aber _refValue hat keine Auswirkung auf Method und das von _arg betroffene Ergebnis wird weiterhin zurückgegeben. Es ist auch denkbar, dass _arg vor der Verwendung zugewiesen werden muss.

Beispiel:

using System; 

/****************************** 
* Chapter:C#难点逐个击破(一) 
* Author:王洪剑 
* Date:2010-1-11 
* Blog:http://www.51obj.cn/ 
* Email:walkingp@126.com 
* Description:重点讲解值传递方式与引用传递方式 
* ***************************/ 
namespace Wang.TestRef 
{ 
public class NormalClass 
{ 
public void ShowNormalResult(string name) 
{ 
name = "Wang Hongjian"; 
Console.WriteLine(name); 
} 
} 
public class RefClass 
{ 
/// <summary> 
/// 引用类型ref类 
/// </summary> 
/// <param name="name"></param> 
public void ShowRefResult(ref string name) 
{ 
name = "Wang Hongjian"; 
Console.WriteLine(name); 
} 
} 
class Program 
{ 
static void Main(string[] args) 
{ 
string _name = "Zhou Runfa";//传递参数 

#region 值传递参数方式 
NormalClass n = new NormalClass(); 
n.ShowNormalResult(_name);//正常调用 
#endregion 

#region 引用传递参数方式 
RefClass o = new RefClass(); 
o.ShowRefResult(ref _name);//结果仍然为引用传递参数 
Console.ReadKey(); 
#endregion 
} 
} 
}

Laufergebnis:

C#-Schwierigkeiten werden nacheinander gelöst (1): Ref-Parameterübergabe


Die oben genannten sind die C#-Schwierigkeiten Nacheinander zu überwinden (1): Der vom Ref-Parameter übergebene Inhalt. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn).


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn