C#难点逐个击破(1):ref参数传递
C#难点逐个击破(1):ref参数传递
发布时间:2016-12-28 来源:查字典编辑
摘要:一般情况,方法的参数传递是通过值进行传递的,即一个对象作为参数传递给方法使用,该对象便进驻到该参数对象所在指针的内存空间(使用C来描述),也...

一般情况,方法的参数传递是通过值进行传递的,即一个对象作为参数传递给方法使用,该对象便进驻到该参数对象所在指针的内存空间(使用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

}

}

}

运行结果:

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

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新C#教程学习
热门C#教程学习
编程开发子分类