博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ref out的用法
阅读量:4701 次
发布时间:2019-06-09

本文共 1441 字,大约阅读时间需要 4 分钟。

现在我们要实现交换2个数的值,由于在程序中经常用到,所以封装到函数中

代码如下

1 ///  2 /// 交换2个数的值 3 ///  4         static public void Swap(int x1, int x2) 5         {
6 int temp = x1; 7 x1 = x2; 8 x2 = temp; 9 }

在打印出2个数的值

1  static void Main(string[] args) 2         {
3 int x1 = 10; 4 int x2 = 20; 5 Swap(x1, x2); 6 Console.WriteLine("x1={0},x2={1}", x1, x2); 7 }

结果如下:

x1=10

x2=20

2个数并没有发生变化,原因在于我们传递给函数的是x1,x2的复制品,所以在swap函数内部的复制品的变化,不会影响到main函数的x1,x2的值(值变量做函数的参数时,传递的都是值的复制),如果我们想在函数内部的参数变化直接影响到外部,那么我们就要用到关键字ref(reference--引用)。

现在我们队程序稍作改变:

 

1 ///  2 /// 交换2个数的值 3 ///  4         static public void Swap(ref int x1,ref int x2) 5         {
6 int temp = x1; 7 x1 = x2; 8 x2 = temp; 9 }

在打印出2个数的值:

1  int x1 = 10; 2             int x2 = 20; 3             Swap(ref x1, ref x2); 4             Console.WriteLine("x1={0},x2={1}", x1, x2); 5             Console.ReadKey();

结果如下:

x1=20

x2=10

总结下:

ref与out的主要区别在于,在.net中函数只能有且只有一个返回值,但是有时我们需要函数返回多个返回值,那要怎么办呢?于是out就派上用场了,而out在函数外被赋值也是白搭,就相当于返回值没有必要被赋值一样,它值负责返回数据,out函数在函数中必须被赋值,这就相当于函数的返回值行为很相像。其实他们就是一回事

而ref就是使值变量由传递的副本变为自身,也就是值传递变为引用传递而已...

ref必须先初始化,因为是引用,所以必须先“有”,才能引用,而out则是内部为外部赋值,所以不需要初始化,而且外部初始化也没用。

ref应用场景内部对外部的值进行改变,out则是内部为外部变量赋值,out一般用在函数有多个返回值的场所。
案例:两个变量的交换;int.TryParse。

例子:int.TryParse函数

具体代码就不写了

转载于:https://www.cnblogs.com/shysky77/archive/2011/12/08/2280424.html

你可能感兴趣的文章
【python练习】ATM&购物商城程序
查看>>
nginx 日志问题(\x22)
查看>>
装饰器、迭代器、生成器
查看>>
类对象作为类成员
查看>>
面向对象和面向过程的区别及优劣对比详解
查看>>
const与指针
查看>>
thsi指针的一些用法及作用
查看>>
c++友元
查看>>
一元运算符重载
查看>>
Windows 远程栈溢出挖掘
查看>>
UNET学习笔记2 - 高级API(HLAPI)
查看>>
"ORA-00942: 表或视图不存在 "的原因和解决方法[转]
查看>>
Oauth支持的5类 grant_type 及说明
查看>>
LeetCode - Same Tree
查看>>
Python dict get items pop update
查看>>
[置顶] 程序员必知(二):位图(bitmap)
查看>>
130242014036-(2)-体验敏捷开发
查看>>
constexpr
查看>>
Nginx 流量和连接数限制
查看>>
IE8/9 本地预览上传图片
查看>>