ref和out的区别
来源:互联网 发布:数据库预留字段命名 编辑:程序博客网 时间:2024/05/22 10:50
通常,向方法传递一个实参时,对应的参数(形参)会用实参的一个副本来初始化。不管形参是值类型(如int),可空类型(如int?),还是引用类型(如string),这一点都是成立的。换言之,谁边在方法内部进行什么修改,都不会影响作为参数来传递的一个变量的原始值。如
public static void DoIncrement(int element) { element++; Console.WriteLine("element={0}",element); }static void Main(string[] args) { int number = 2; DoIncrement(number);//element输出3 Console.WriteLine("number={0}",number);//number输出2 }
在少数情况下,我们希望一个方法能实际的修改一个实参,为此,C#就提供了ref和out。
1、ref
如果为一个参数(形参)附加了一个ref关键字作为前缀,该参数就会成为实参的一个别名(或者对实参的一个引用),而不在是实参的一个副本。使用ref时,像参数应用的任何操作都会同样应用于实参 ,因为参数(形参)和实参引用的是同一个对象。实参也必须附加ref关键字作为前缀,明确说明实参将会改变:
如:
public static void DoIncrement(ref int element) { element++; Console.WriteLine("element={0}",element); }static void Main(string[] args) { int number = 2; DoIncrement(ref number);//element输出3 Console.WriteLine("number={0}",number);//number输出3 }
“变量是用前必须赋值”这个规则同样适用于ref实参,如
static void Main(string[] args) { int number ;//未初始化,编译会出错 DoIncrement(ref number);//element输出3 Console.WriteLine("number={0}",number);//number输出3 }
2.out
编译器会在调用方法前,验证他的ref参数是否已被赋值,然而某些时候,我们可能希望由方法本身来初始化参数,所以希望向其传递一个未初始化的实参,于是就有了out关键字。
out和ref用法和作用非常类似,差别在于,在向方法传递一个out参数之后,必须在方法内部对其进行赋值。如:
public static void DoIncrement(out int element) { element = 2;//初始化 element++; Console.WriteLine("element={0}",element); }static void Main(string[] args) { int number ; DoIncrement(out number);//element输出3 Console.WriteLine("number={0}",number);//number输出3 }
- ref和out的区别
- ref 和 out 的区别
- out和ref的区别
- ref和out的区别
- ref和out的区别
- ref和out的区别
- ref 和 out 的区别
- Ref和Out的区别
- out和ref的区别?
- ref和out的区别
- out和ref的区别
- ref 和out的区别
- ref和out的区别
- ref和out的区别
- ref和out的区别
- ref和out的区别
- ref和out的区别
- ref和out的区别
- Matlab函数参考
- 【开源自动化测试疑难FAQ】【WebDriver】不可编辑域和日历控件域的输入
- mysql不能使用innodb存储引擎
- 页面设计 中英文输出 自动换行
- Delphi 教程
- ref和out的区别
- HDU 4276 The Ghost Blows Light
- OAException: Application: ICX, Message Name: ICX_SESSION_FAILED.
- 说一下mysql,oracle等常见数据库的分页实现方案?
- Linux 连续执行多条命令的方法 .
- sql创建作业调度
- mysql数据库快速冷备命令
- struts2之远程执行
- 写给26岁的自己