Ref_Out
2014-04-23 23:18
204 查看
<>
ref应用场景是内部对外部传进了的值进行改变。既然从外部传进了值,那么外部变量就需要先初始化
<2>
使用out引用参数必须在函数里面对参数进行赋值,否则就报错“使用了未赋值的out参数
ref应用场景是内部对外部传进了的值进行改变。既然从外部传进了值,那么外部变量就需要先初始化
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Ref_Out { //ref应用场景是内部对外部传进了的值进行改变。既然从外部传进了值,那么外部变量就需要先初始化(赋值) class Ref { public static void IncAge(int age) { age++; } public static void IncAge2(ref int age2) //ref必须要配对使用 { age2++; } //ref应用场景 public static void Swap(ref int i1, ref int i2) { int temp; temp = i1; i1 = i2; i2 = temp; } } //out应用场景是内部为外部变量赋值,所以不需要先初始化(赋值),只要在函数里面为参数赋值 //out一般用在函数有多个返回值的场所【一个函数(方法)只能有一个返回值,如果想要有多个返回值就用out】 class Out { public static void IncAge(int age) { age++; } //out内部 public static void IncAge2(out int age2) { age2 = 30;//使用out引用参数必须在函数里面对参数进行赋值,否则就报错“使用了未赋值的out参数age2,控制离开当前方法之前必须对out参数age2赋值” age2++; } } class Program { static void Main(string[] args) { //======================================================================Ref int ref_age = 10; Ref.IncAge(ref_age); Console.WriteLine(ref_age);//输出10 int ref_age2 = 10;//使用ref引用,参数必须要先赋值 Ref.IncAge2(ref ref_age2); Console.WriteLine(ref_age2);//输出11 //ref使用实例<交换两个变量i1与i2的值> int i1 = 10; int i2 = 20; Ref.Swap(ref i1, ref i2);//通过引用参数将i1与i2的引用交换,而不是普通的将拷贝交换 Console.WriteLine("i1={0},i2={1}",i1,i2); //======================================================================Out int out_age = 10; Out.IncAge(out_age); Console.WriteLine(out_age); //输出10 int out_age2 = 10; //使用out引用,外部不需要赋值,即便赋值了也没用, Out.IncAge2(out out_age2); Console.WriteLine(out_age2); //输出31 //out使用实例 string str = Console.ReadLine();//读取用户输入的文字 int i; // int.TryParse(str, out i);//它的返回值是一个布尔值,这句代码的意思其实就是将用户输入的文字转换成int 类型的数字,如果转换成功就返回一个true,转换不成功就返回false if (int.TryParse(str, out i)) //这条语句其实有两个返回值,一个是bool值,一个是i { Console.WriteLine("转换成功{0}",i); } else { Console.WriteLine("转换失败"); } Console.ReadKey(); } } }
<2>
使用out引用参数必须在函数里面对参数进行赋值,否则就报错“使用了未赋值的out参数
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Test { public class Test { public static void ClassA() { string a = ""; string b = ""; string c = Test.GetP(out a, out b); //调用GetP()方法,将两个未赋值的 a,b作为参数,在GetP()方法中给a,b赋值。然后得到赋值后的a,b。还得到GetP()方法的返回值。 所以这个Test.GetP(out a, out b)方法获取到了3个返回值。 Console.WriteLine("a={0};b={1}; c={2}", a, b, c); //输出:a=张三; b=李四; c=王五 Console.ReadKey(); } //一个方法本来只能有一个返回值。但是我们想在一个方法中获得多个返回值怎么办呢? 对:我们可以out参数 //我们通过out将参数a,b在GetP()方法中将赋值,然后再将它返回回去。那么在方法外面,可以通过调用这个方法来获取 a,b两个已经赋值了的参数。还可以得到GetP()方法本身的放回值。 public static string GetP(out string a, out string b) { a = "张三"; //将这个参数赋值张三 b = "李四"; //将这个参数赋值李四 return "王五"; //GetP()方法的返回值是王五。 } } class Program { static void Main(string[] args) { Test.ClassA(); //执行这段代码:输出:a=张三; b=李四; c=王五 } } }
相关文章推荐
- ref和out的区别
- 深入理解C#之 参数传递 ref out params
- 黑马程序员--关键字ref、out、与params
- ref,out和params的区别
- C#中关于out和ref的使用
- C# 参考之方法参数关键字:params、ref及out
- C#中out和ref之间的区别
- ref 和 out
- C# 基础(一) 访问修饰符、ref与out、标志枚举等等
- ref和out的异同
- 【KK学习笔记】c# 参数修饰符 out ref params
- 注意C#中的ref及out关键字
- C#方法中的ref和out
- C#中使用ref和out一点认识
- C#中的参数修饰符 ref,out ,params
- ref、out 修饰符
- ref和out
- C#中ref和out关键字的区别?
- 使用ref和out参数
- 含有REF CURSOR 的过程只能有一个out参数?