ref和out区别有哪些
类别:编程学习 浏览量:713
时间:2014-7-16 ref和out区别有哪些
ref和out区别有哪些通常我们向方法中传递的是值.方法获得的是这些值的一个拷贝,然后使用这些拷贝,当方法运行完毕后,这些拷贝将被丢弃,而原来的值不将受到影响.此外我们还有其他向方法传递参数的形式,引用(ref)和输出(out).
有时,我们需要改变原来变量中的值,这时,我们可以向方法传递变量的引用,而不是变量的值.引用是一个变量,他可以访问原来变量的值,修改引用将修改原来变量的值.变量的值存储在内存中,可以创建一个引用,他指向变量在内存中的位置.当引用被修改时,修改的是内存中的值,因此变量的值可以将被修改.当我们调用一个含有引用参数的方法时,方法中的参数将指向被传递给方法的相应变量,因此,我们会明白,为什么当修改参数变量的修改也将导致原来变量的值.
通过指定返回类型,可以从方法返回一个值,有时候(也许还没遇到,但是我们应该有这么个方法),需要返回多个值,虽然我们可以使用ref来完成,但是C#专门提供了一个属性类型,关键字为out.
1、使用ref型参数时,传入的参数必须先被初始化。对out而言,必须在方法中对其完成初始化。
2、使用ref和out时,在方法的参数和执行方法时,都要加Ref或Out关键字。以满足匹配。
3、out适合用在需要retrun多个返回值的地方,而ref则用在需要被调用的方法修改调用者的引用的时候。
4、ref传进去的参数在函数内部可以直接使用,而out不可。
5、系统对ref的限制是更少一些的。out虽然不要求在调用前一定要初始化,但是其值在函数内部是不可见的,也就是不能使用通过out传进来的值,并且一定要在函数内赋一个值。或者说函数承担初始化这个变量的责任。
6、若要使用 ref 参数,必须将参数作为 ref 参数显式传递到方法。ref 参数的值被传递到 ref 参数。
7、当希望方法返回多个值时,声明 out 方法非常有用。使用 out 参数的方法仍然可以返回一个值。一个方法可以有一个以上的 out 参数。若要使用 out 参数,必须将参数作为 out 参数显式传递到方法。out 参数的值不会传递到 out 参数。
四、ref实例
using System;
class M
{
public void F(ref int i)
{
i=3;
}
}
class Test
{
int i=0; //要作为引用参数传递的变量必须明确赋值
static void Main()
{ //不能把int i=0;放在这里赋值,会报错说Test不包含i定义。
Test t=new Test();
Console.WriteLine("the value of i is:{0}",t.i);
M mm=new M();
mm.F(ref t.i); //作为引用参数传递
Console.WriteLine("now the value of i is :{0}",t.i); //i的值改变
}
}
五、out实例
class M { public void F(out int i) //这个方法和ref的方法都是一样,没什么不同 { i = 8; //返回前必须明确赋值 } } class Test { int i; //不用赋初值,这就是out和ref的区别,但声明还是要的 public static void Main() { Test t1 = new Test(); Console.WriteLine("the value of i is :{0}", t1.i); //输出是0; M m1 = new M(); m1.F(out t1.i); //i作为输出参数传递 ,输出是8 Console.WriteLine("now value of i is :{0}", t1.i); }}
您可能感兴趣
- ASP.NET获取网页中的图片
- ASP.NET中Obsolete属性
- 为什么asp.net网站第一次加载慢
- ASP.NET网站的404错误页面的设置
- ASP.NET中重载(Overload)和覆写(Override)
- ASP.NET使用JavaScriptSerializer实现序列化与反序列化
- asp.net中split的用法
- ASP.NET中XML和JSON互转
- asp.net 文件操作
- ASP.NET URL路径问题
- asp.net自定义分页控件
- ASP.NET中application对象的用法
- ASP.NET匿名类型var
- ASP.NET实现多文件上传
- ASP.NET实现FTP上传文件
- 开源asp.net(apache下支持asp.net的实现方法)
- 前《iLOOK》时装总监 《快乐大本营》御用造型师上线(快乐大本营御用造型师上线)
- 释小龙晒杀青照片 多重身份惹观众期待(释小龙晒杀青照片)
- 《九牛之人降魔传》开机 演员祁高坤化身九牛之人除魔卫道(九牛之人降魔传开机)
- 王铲铲的致富之路无限金币卡法攻略教学(王铲铲的致富之路无限金币卡法攻略教学)
- 文明6金币太少怎么办 文明6无限刷钱教程(文明6金币太少怎么办)
- 开国中将,王牌军63军首任政委,两个连襟一个上将一个少将传为佳话(王牌军63军首任政委)
热门推荐
- python计算1到10的阶乘的和(python计算阶乘和的方法1!+2!+3!+...+n!)
- dedecms的简单说明(dedecms 后台假死问题解决方法)
- python的条件判断和循环(浅谈Python基础—判断和循环)
- python操作json格式(详解python 3.6 安装json 模块simplejson)
- mysql索引的弊端(MySQL 全文索引的原理与缺陷)
- dedecms循环次数(DedeCMS 统计栏目的文章总数的调用方法)
- laravel数据迁移(Laravel框架实现的上传图片到七牛功能详解)
- nginx与tomcat长连接(Windows下使用Nginx+Tomcat做负载均衡的完整步骤)
- mysql删除数据库的命令(MySQL 线上数据库清理数据的方法)
- django框架教程学习(使用Django简单编写一个XSS平台的方法步骤)