ホームページ  >  記事  >  バックエンド開発  >  C# の問題を 1 つずつ解決 (1): ref パラメーターの受け渡し

C# の問題を 1 つずつ解決 (1): ref パラメーターの受け渡し

黄舟
黄舟オリジナル
2016-12-22 14:02:401715ブラウズ

一般に、メソッドのパラメータは値によって渡されます。つまり、オブジェクトがパラメータとしてメソッドに渡され、オブジェクトはパラメータ オブジェクトが配置されているポインタのメモリ空間に格納されます (C を使用して説明)つまり、オブジェクトはこの場所にコピーが作成され、メソッドが終了すると破棄されます。この転送メソッドの使用は、毎日のメソッド パラメータ転送の大部分を占めます。

もう 1 つの状況は参照の受け渡しです。これは値の受け渡しとは異なり、オブジェクトがメソッドのパラメーターに渡されるときは、元のパラメーター値の影響を受けるメソッドが返されます。 MethodInstance(ref _refValue) は Method (ref _arg) メソッドを呼び出しますが、_refValue は Method に影響を与えず、_arg の影響を受けた結果が返されます。 _arg は使用前に代入する必要があるとも考えられます。

例:

もう 1 つの状況は、値の受け渡しとは異なる参照の受け渡しです。オブジェクトがメソッドに渡されるとき、返されるのは元のパラメーター値の影響を受けるメソッドです。つまり、MethodInstance(ref _refValue) は Method (ref _arg) メソッドを呼び出しますが、_refValue は Method に影響を与えず、_arg の影響を受けた結果が返されます。 _arg は使用前に代入する必要があるとも考えられます。

例:

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 
} 
} 
}

操作結果:

C# の問題を 1 つずつ解決 (1): ref パラメーターの受け渡し


上記は C# の難しさを 1 つずつ示します (1): ref パラメーターで渡される内容 さらに関連する内容については、PHP に注目してください。中国語のウェブサイト (www.php.cn)!


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。