ref和out的使用与区别
out的使用
—————————————————————————————————————————————————
class Program
{
static void Main(string[] args)
{
string tmp; //先声明,但不初始化
User _user=new User();
_user.Name(out tmp); //调用Name方法
Console.WriteLine("{0}",tmp); //这时tmp的值为“在这里面赋值了”
Console.ReadKey(true);
}
}
class User
{
public void Name(out string tmps)
{
tmps="在这里面赋值了";
}
}
结果:
在这里面赋值了
—————————————————————————————————————————————————
ref的使用
—————————————————————————————————————————————————
class Program
{
static void Main(string[] args)
{
string tmp="传值之前"; //声明并初始化 这时如果输出tmp值为"传值之前"
User _user=new User();
_user.Name(ref tmp);
Console.WriteLine("{0}",tmp);
Console.ReadKey(true);
}
}
class User
{
public void Name(ref string tmps)
{
tmps="传值之后";
}
}
结果:
传值之后
—————————————————————————————————————————————————
区别:
ref和out的区别在C# 中,既可以通过值也可以通过引用传递参数。通过引用传递参数允许函数成员更改参数的值,并保持该更改。若要通过引用传递参数, 可使用ref或out关键字。ref和out这两个关键字都能够提供相似的功效,其作用也很像C中的指针变量。它们的区别是:
1、使用ref型参数时,传入的参数必须先被初始化。对out而言,必须在方法中对其完成初始化。
2、使用ref和out时,在方法的参数和执行方法时,都要加Ref或Out关键字。以满足匹配。
3、out适合用在需要retrun多个返回值的地方,而ref则用在需要被调用的方法修改调用者的引用的时候。
out
方法参数上的 out 方法参数关键字使方法引用传递到方法的同一个变量。当控制传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。
当希望方法返回多个值时,声明 out 方法非常有用。使用 out 参数的方法仍然可以返回一个值。一个方法可以有一个以上的 out 参数。
若要使用 out 参数,必须将参数作为 out 参数显式传递到方法。out 参数的值不会传递到 out 参数。
不必初始化作为 out 参数传递的变量。然而,必须在方法返回之前为 out 参数赋值。
属性不是变量,不能作为 out 参数传递。
ref是 有进有出,而out是 只出不进。
ref和out的使用与区别相关推荐
- 形参与实参, 值传递与引用传递, ref参数与out参数的区别和联系?
一. 形参与实参 1.先来一例子: fun(int a) {........} Main () { int b=0; fun(b); } 其中,a是形参,b是实参. 2.再看理论定义 形参出现 ...
- c#中out、ref和params的用法与区别
ref和out都对函数参数采用引用传递形式--不管是值类型参数还是引用类型参数,并且定义函数和调用函数时都必须显示生命该参数为 ref/out形式.两者都可以使函数传回多个结果. 两者区别: 两种参数 ...
- C#:ref和out的联系及区别。
总结以上四条得到ref和out使用时的区别是: ①:ref指定的参数在函数调用时候必须初始化,不能为空的引用.而out指定的参数在函数调用时候可以不初始化: ②:out指定的参数在进入函数时会清空自己 ...
- ref和out的联系及区别(转)
一:ref 关键字使参数按引用传递. 其效果是,当控制权传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中.若要使用 ref 参数,则方法定义和调用方法都必须显式使用 ref 关键字. ...
- ref与out之间的区别
ref和out都是C#中的关键字,所实现的功能也差不多,都是指定一个参数按照引用传递.对于编译后的程序而言,它们之间没有任何区别,也就是说它们只有语法区别. 总结起来,他们有如下语法区别: 1.ref ...
- C#Ref与Out的区别
ref和out都是C#中的关键字,所实现的功能也差不多,都是指定一个参数按照引用传递.对于编译后的程序而言,它们之间没有任何区别,也就是说它们只有语法区别. 总结起来,他们有如下语法区别: 1.ref ...
- C#——ref和out的区别
ref和out都是C#中的关键字,所实现的功能也差不多,都是指定一个参数按照引用传递.对于编译后的程序而言,它们之间没有任何区别,也就是说它们只有语法区别. 总结起来,他们有如下语法区别: 1.ref ...
- 【STM32】处理字符串时 \r\n、\r、\n 的区别
文章目录 简介 测试 先 \r 后 \n 先 \n 后 \r Ref: 简介 回车"(Carriage Return)和"换行"(Line Feed)这两个概念的来历和区 ...
- c#中ref和out 关键字
问题:为什么c#中要有ref和out?(而java中没有) 需求假设:现需要通过一个叫Swap的方法交换a,b两个变量的值.交换前a=1,b=2,断言:交换后a=2,b=1. 现编码如下: class ...
最新文章
- 创建虚拟环境 安装pytorch 0.3.1
- 高德亿级流量接入层服务的演化之路
- 阿米洛键盘取消win_【机械键盘】2020年双十二那些值得购买的机械键盘推荐
- 这些赛道设计的点子,不让用太可惜了 | 赛道审核环节
- hdu5015 矩阵快速幂233(好题)
- 论IP地址在数据库中应该用何种形式存储
- pymsql 与 SQLAlchemy 操作数据库的区别
- hashtable,dictionary 从原理上说说有什么异同,哪个性能高一些
- Samba将Linux集成到Windows网络
- JEECG v3.0.beta发布,基于代码生成器的智能开发平台
- win10如何查看文件夹的大小 - 方法大全
- python3实战练手项目_Python0基础练手项目有哪些值得推荐?附实战项目+学习图谱...
- Objective-C之@类别小实例
- 推荐10个 Chrome 插件
- 牌匾设计软件测试自学,回弹检测测点
- 第三方银联支付接口对接_php版银联支付接口开发简明教程
- 44、网络配线架如何打?超5类线水晶头与6类线水晶头制作方法
- Android百度地图+OSS图片拍照上传+导航+idea
- 孕妇适合吃哪些蔬菜?这三种蔬菜很有营养
- linux如何编写crontab定时脚本,linux下编写定时任务crontab