C#学习:函数的ref 、out 参数
函数参数默认是值传递的,也就是“复制⼀份”,通过函数的处理对数值本⾝并没有影响,如果函数想对数值本⾝产⽣影响就需要使⽤相应的参数。
writeline函数ref 必须先初始化,因为是引⽤,所以必须先“有”,才能引⽤。使⽤ref 如果未进⾏初始化,将报出如图所⽰的错误使⽤了未赋值的局部变量“age”:
加上ref 之后传参传的是引⽤⽽不再是没加ref 时的拷贝。
out 是内部为外部赋值,所以不需要初始化,⽽且初始化也没⽤。执⾏结果:
总结:ref 应⽤场景内部对外部的值进⾏改变,out 则是内部为外部变量赋值,out ⼀般⽤在函数有多个返回值的场所。out 应⽤举例:int.TryParse [csharp]
01. using System; 02. using System.Collections.Generic; 03. using System.Linq; 04. using System.Text; 05. 06. namespace refout 参数 07. { 08. class Program 09. { 10. static void Main(string [] args) 11. { 12. int age; 13. IncAge(ref age); 14. Console.WriteLine(age); 15. Console.ReadKey(); 16. } 17. 18. static void IncAge(ref int age) 19. { 20. age++; 21. } 22. 23. } 24. } [csharp]
01. using System; 02. using System.Collections.Generic; 03. using System.Linq; 04. using System.Text; 05. 06. namespace refout 参数 07. { 08. class Program 09. { 10. static void Main(string [] args) 11. { 12. int age; 13. IncAge(out age); 14. Console.WriteLine(age); 15. Console.ReadKey(); 16. } 17. 18. static void IncAge(out int age) 19. { 20. age=20; 21. } 22. 23. } 24. }
int.Parse()是⼀种类容转换;表⽰将数字内容的字符串转为int 类型。
如果字符串为空,则抛出ArgumentNullException 异常;
如果字符串内容不是数字,则抛出FormatException 异常;
如果字符串内容所表⽰数字超出int 类型可表⽰的范围,则抛出OverflowException 异常;
int.TryParse 与 int.Parse ⼜较为类似,但它不会产⽣异常,转换成功返回 true ,转换失败返回 false 。最后⼀个参数为输出值,如果转换失败,输出值为 0
执⾏结果:转换成功:转换失败:
ref 应⽤举例:
交换函数Swap :
如果不使⽤ref 参数,Swap 处理的将仅仅是i1和i2的拷贝,对值本⾝没有影响。所以数值没有改变。
使⽤ref 参数则将引⽤传⼊函数,⽽不仅是值得拷贝。执⾏结果:
[csharp]
01. using System; 02. using System.Collections.Generic; 03. using System.Linq; 04. using System.Text; 05. 06. namespace refout 参数 07. { 08. class Program 09. { 10. static void Main(string [] args) 11. { 12. string str = Console.ReadLine(); 13. int i; 14. if (int .TryParse(str ,out i)) //i 在内部被赋值 15. { 16. Console.WriteLine("转换成功!{0}",i); 17. } 18. else 19. { 20. Console.WriteLine("转换失败!{0}",i); 21. } 22. Console.ReadKey(); 23. } 24. } 25. } [csharp]
01. using System; 02. using System.Collections.Generic; 03. using System.Linq; 04. using System.Text; 05. 06. namespace refout 参数 07. { 08. class Program 09. { 10. static void Main(string [] args) 11. { 12. int i1 = 10; 13. int i2 = 20; 14. Swap(ref i1,ref i2); //注意ref 参数 15. Console.WriteLine("i1={0},i2={1}", i1, i2); 16. C
onsole.ReadKey(); 17. } 18. static void Swap(ref int i1,ref int i2) //注意ref 参数 19. { 20. int temp = i1; 21. i1 = i2; 22. i2 = temp; 23. } 24. } 25. }
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论