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

所属分类: 软件编程 / C#教程 阅读数: 121
收藏 0 赞 0 分享
一般情况,方法的参数传递是通过值进行传递的,即一个对象作为参数传递给方法使用,该对象便进驻到该参数对象所在指针的内存空间(使用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#实现写系统日志的方法

这篇文章主要介绍了C#实现写系统日志的方法,涉及C#针对系统日志的创建、写入及删除等技巧,非常具有实用价值,需要的朋友可以参考下
收藏 0 赞 0 分享

C#编程实现自定义热键的方法

这篇文章主要介绍了C#编程实现自定义热键的方法,涉及C#键盘按键设置的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

C#实现读取被进程占用的文件实现方法

这篇文章主要介绍了C#实现读取被进程占用的文件实现方法,涉及C#进程操作及文件读取的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

C#获取任务栏显示进程的方法

这篇文章主要介绍了C#获取任务栏显示进程的方法,涉及C#针对进程操作的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

C#调用dos窗口获取相关信息的方法

这篇文章主要介绍了C#调用dos窗口获取相关信息的方法,涉及C#调用dos窗口及进程操作的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

C#通过Semaphore类控制线程队列的方法

这篇文章主要介绍了C#通过Semaphore类控制线程队列的方法,涉及Semaphore类操作线程队列的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

C#使用Dispose模式实现手动对资源的释放

这篇文章主要介绍了C#使用Dispose模式实现手动对资源的释放,涉及C#采用Dispose模式操作资源的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

C#动态创建button的方法

这篇文章主要介绍了C#动态创建button的方法,涉及C#按钮属性动态设置的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

C#编程获取资源文件中图片的方法

这篇文章主要介绍了C#编程获取资源文件中图片的方法,涉及C#针对项目中资源文件操作的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

WinForm实现窗体最大化并遮盖任务栏的方法

这篇文章主要介绍了WinForm实现窗体最大化并遮盖任务栏的方法,涉及C#实现WinForm窗体全屏显示的实现及调用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多