C# Ref 与out 的区别
在C#中,有四种传递参数方式:
1. 传值 (value) : 无额外修饰符
2. 传址(reference) : 需修饰符Ref,传入函数的参数必须先赋值
3. 输出参数(output): 需修饰符out,适用于return多个返回值,必须在方法中赋值
4.数组参数 (array):需修饰符params
引用网上一段话:ref 是有进有出(进时需赋值,内部可以修改,并且修改后的值函数结束后仍将保留)
而out是只出不进 (外部即便赋值,也不会传入函数内,编译器将提示该参数未被初始化,在函数内必须赋值,修改后和Ref参数一样,其值将保留)
class Program
{
static void Main(string[] args)
{
int m = 0;// ref 参数使用前必须初始化赋值
int k=100; // out 参数使用前不用初始化赋值,即便初始化,当使用out引用后,编译器仍将认为其未初始化
MessageBox.Show(k.ToString()); //返回100
MessageBox.Show(RefValue(1, ref m).ToString());//返回1
MessageBox.Show(m.ToString());//返回222
MessageBox.Show(OutValue(1, out k).ToString());//返回223
MessageBox.Show(k.ToString());//返回222
} private static int RefValue(int i, ref int j)
{
int k = j;
j = 222;
return i + k;
} private static int OutValue(int i, out int j)
{
//int k = j; //即便在外部定义了j=100 ,但任然无法使用,编译器提示未初始化
j = 222;
return i + j;
}
}
传值参数在方法中如果改变了参数的值,其改变后的值只能在方法内使用,方法调用完成后参数只会保留原来传入时的值。
通过以上测试,可以看到out 和ref 应用骏相当于传递指针,故其修改将直接修改原参数的值。
网上看到:http://greatverve.cnblogs.com/archive/2012/02/27/ref-out.html
属性不是变量,不能作为ref 和out参数传递,这里记录下来
C# Ref 与out 的区别的更多相关文章
- ref和out的区别,值类型和引用类型的使用
今天刚刚明白ref和out的区别,只限于个人理解如有不同请赐教,谢谢 首先我感觉ref和out是针对于值类型来说,以前一直认为是针对于引用类型看下面的一段代码 1.首先结果 i=0:ints[0]=0 ...
- ref和out的区别?
ref 和out的区别在面试中会常问到: 首先:两者都是按地址传递的,使用后都将改变原来参数的数值. 其次:ref可以把参数的数值传递进函数,但是out是要把参数清空,就是说你无法把一个数值从out传 ...
- ref和out的区别
ref类型参数是按地址传递,能改变原来的数值.使用ref传参前,变量必须赋值. 带有ref类型参数的函数,不会清空变量,所以离开该函数的时候,所有ref引用的变量可以赋值也可以不赋值. out类型参数 ...
- 浅谈C#中ref与out的区别
在C#这门高级语言中,你是否注意过ref与out的用法?你是否为在调用方法时需要多个返回值呢?不用急,接下来,我们去一起去研究一下这个问题... 其实呢,C#语言中,参数的传递一共有两种方法,值传递和 ...
- C#中的ref和out的区别
转载原地址 http://www.cnblogs.com/gjahead/archive/2008/02/28/1084871.html ref和out的区别在C# 中,既可以通过值也可以通过引用传递 ...
- 关于ref与out的区别
写在最前面 这几天一直在公司接受培训,都是一些基础的知识,同时也乘着这个机会巩固一下自己的基础,基础太重要了.前些时一直看的是多线程方面的知识,接下来我会写一些其他方面的知识,毕竟作为一个实习新人得和 ...
- C#中ref和out的区别浅析
这篇文章主要介绍了C#中ref和out的区别浅析,当一个方法需要返回多个值的时候,就需要用到ref和out,那么这两个方法区别在哪儿呢,需要的朋友可以参考下 在C#中通过使用方法来获取返回值时,通 ...
- 参数修饰符ref,out ,params的区别
参数修饰符ref,out ,params的区别 C#中有三个关键字-ref,out ,params,可是这三个之间的区别你都明白了吗? 那么我们就来认识一下参数修饰符ref,out ,params吧, ...
- ref与out的区别、冒泡排序、普通排序,以及二分法查询
一.首先我们先讲一下ref与out的区别和使用方法: 1.ref与out的区别: out:需要在使用前声明变量,分配地址但不能赋值,但是需要在使用中的时候需要初始化(进入方法体中的时候需要先赋值在使用 ...
- Spring框架xml配置中属性ref与value的区别
1.spring批量扫描mybatis的mapper,使用value 2.spring管理mybatis的单个mapper,用的是ref 虽然引用的是同一个bean,但两个对象的属相类型明显不一样,一 ...
随机推荐
- WordPress Videowall插件‘page_id’参数跨站脚本漏洞
漏洞名称: WordPress Videowall插件‘page_id’参数跨站脚本漏洞 CNNVD编号: CNNVD-201310-502 发布时间: 2013-10-23 更新时间: 2013-1 ...
- (转载)php获取form表单中name相同的表单项
(转载)http://hi.baidu.com/ruhyxowwzhbqszq/item/5fd9c8b9b594db47ba0e12a9 比如下面的表单: /*form.php*/ <form ...
- ASP.NET返回Json数据
Schedule.ashx: <%@ WebHandler Language="C#" Class="Schedule" %> using Syst ...
- [转]NHibernate之旅(1):开篇有益
本节内容 NHibernate是什么 NHibernate的架构 NHibernate资源 欢迎加入NHibernate中文社区 作者注:2009-11-06已更新 NHibernate开篇有益 学习 ...
- web调试工具
Fiddler是最强大最好用的Web调试工具之一,它能记录所有客户端和服务器的http和https请求,允许你监视,设置断点,甚至修改输入输出数据. 使用Fiddler无论对开发还是测试来说,都有很大 ...
- JavaScript高级程序设计44.pdf
unload事件 与load事件对应的是unload事件,这个事件在文档被完全卸载后触发,只要用户从一个页面切换到另一个页面,就会发生unload事件,最多的情况是清除引用,避免内存泄漏 与load事 ...
- zoj 3878 Convert QWERTY to Dvorak【好坑的模拟】
Convert QWERTY to Dvorak Time Limit: 2 Seconds Memory Limit: 65536 KB Edward, a poor copy typis ...
- 【oracle】触发器简单实现
目标:实现实时备份uertest表数据至usertest_temp中,两表结构一致 解决:用oracle触发器实现同步 结果: 1.建表 -- 简单的用户表 create table USERTEST ...
- PAT 1012. The Best Rank
To evaluate the performance of our first year CS majored students, we consider their grades of three ...
- Java-工厂设计模式
引言: 工厂设计模式分为三种: 简单工厂 工厂方法 抽象工厂 联想四种情况 (1).还没有工厂时代:假如还没有工业革命,如果一个客户要一件产品,一般的做法是客户去创建一件产品,然后拿来用. (2).简 ...