C#难点逐个击破(1):ref参数传递

一般情况,方法的参数传递是通过值进行传递的,即一个对象作为参数传递给方法使用,该对象便进驻到该参数对象所在指针的内存空间(使用C来描述),也就是该对象在此位置创建了副本,当方法运行结束时,该副本将会被销毁;这种传递方式的使用占据了日常方法传参的绝大多数。

另一种情况是引用传递,它与值传递方式不同,对象传递给方法时对方法参数并没有影响,仍然返回的是受原始参数取值影响的方法,即MethodInstance(ref _refValue)调用 Method(ref _arg)方法,但_refValue对Method无影响,返回的仍是_arg影响的结果。这点也能想到_arg必须在使用前赋值。

示例:

另一种情况是引用传递,它与值传递方式不同,对象传递给方法时对方法参数并没有影响,仍然返回的是受原始参数取值影响的方法,即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 
} 
} 
}

运行结果:

111.png


以上就是C#难点逐个击破(1):ref参数传递的内容,更多相关内容请关注龙方网络(www.yzlfxy.com)!

郑重声明:本文版权包含图片归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们(delete@yzlfxy.com)修改或删除,多谢。

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

留言与评论(共有 0 条评论)
昵称:
匿名发表
   
验证码: