out的使用
out 能够使我们的函数返回多个类型的值,不再受返回类型的设置;
就是相当于在方法里不仅仅给了一个返回值,被out修饰的参数的值也能带出去;
所以就是说,在方法体内被out修饰的参数,都可以在主函数内获取值来用。大致就是这样
—————————————————————————————————————————————————
在这里面被修饰的参数是msg,而且在方法体内部,对不同情况msg有不同的值;
所以在主函数内,我们就看到,msg被定义了一下,但是,msg的值还是方法体内的值。
1 class Program 2 { 3 static void Main(string[] args) 4 { 5 6 Console.WriteLine("请输入一个用户名"); 7 string name = Console.ReadLine(); 8 Console.WriteLine("请输入一个密码"); 9 string pwd = Console.ReadLine(); 10 string msg; 11 bool b = login(name, pwd, out msg); 12 Console.WriteLine("登陆结果{0}",b); 13 Console.WriteLine("登陆信息{0}",msg); 14 Console.ReadKey(); 15 16 } 17 //方法的作用就是:先定义好要实现一个什么功能的公式,然后在主函数里代入数据再代用方法, 18 //第一步先在形参中写上out等要多余返回的参数 19 //out参数 20 21 22 //分别提示用户输入用户名和密码 23 //写一个方法来判断用户名和输入的是否正确 24 //返回给用户一个登陆结果,并且单独返回给用户一个登录信息 25 //如果用户名错误,除了返回登陆结果之外,还要返回一个“用户名错误” 26 public static bool login(string name,string pwd,out string msg) 27 { 28 //就作用户名和密码能不能匹配正确和返回相应的信息 29 if (name == "lisi" && pwd == "123") 30 { 31 msg = "登陆成功"; 32 return true; 33 } 34 if (name == "lisi") 35 { 36 msg = "密码错误"; 37 return false; 38 } 39 if (pwd == "123") 40 { 41 msg = "用户名错误"; 42 return false; 43 } 44 else 45 { 46 msg = "未知错误"; 47 return false; 48 } 49 50 } 51 }
1 int numm;//这个trypase自带out返回参数的类型,F12可以进去看看他的定义 2 bool num = int.TryParse(null, out numm); 3 // bool num = int.TryParse("1212", out numm); 4 Console.WriteLine(num); 5 Console.WriteLine(numm); 6 Console.ReadKey();
—————————————————————————————————————————————————
ref的使用
—————————————————————————————————————————————————
//ref 就是讲一个变量作为参数带入到一个方法中进行改变,deng这个值改变后再将改变后的值
//带回来。注意:无论方法有没有返回值,会将参数的值改变。只要参数被ref改变啦
//这个方法就没有返回值return等词,照样可以将主函数内的改变掉
//反正,我认为ref就是你在方法没有return 的时候参数只要被ref修饰,参数就会改变
其他的没啥用
—————————————————————————————————————————————————
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace ref参数 8 { 9 class Program 10 { 11 static void Main(string[] args) 12 { 13 //double money = 5000; 14 ////double b= jiangjin(money); 15 //jiangjin(ref money); 16 //Console.WriteLine(money); 17 //Console.ReadKey(); 18 int n1 = 10; 19 int n2 = 20; 20 //引入第三者进行转换 21 //int temp = n1; 22 //n1 = n2; 23 //n2 = temp; 24 25 //不用第三者 26 //n1 = n1 - n2;//n1:-10 n2: 20 27 //n2=n1+n2;//n2:10 n1;-10 28 //n1=n2-n1;//n1:20 n2:10 29 change(ref n1,ref n2); 30 Console.WriteLine(n1); 31 Console.WriteLine(n2); 32 33 string name = "zkb"; 34 tom(ref name); 35 Console.ReadKey(); 36 } 37 //ref 就是讲一个变量作为参数带入到一个方法中进行改变,deng这个值改变后再将改变后的值 38 //带回来。注意:无论方法有没有返回值,会将参数的值改变。只要参数被ref改变啦 39 public static void jiangjin(ref double s) 40 { 41 //s = s + 500; 42 // return 在加ref之前,是无返回值的方法,还没有写return 是有错误的,加上ref之后,在主函数中方法后面的参数+ref就可以啦 43 //ref就是方法不加return 不改变方法的类型 44 } 45 //这个方法就没有返回值return等词,照样可以将主函数内的改变掉 46 //反正,我认为ref就是你在方法没有return 的时候参数只要被ref修饰,参数就会改变 47 public static void change(ref int s1,ref int s2) 48 { 49 int temp = s1; 50 s1 = s2; 51 s2 = temp; 52 } 53 54 public static void tom(ref string name) 55 { 56 Console.WriteLine( name = name + "ojbk"); 57 } 58 } 59 }
------------------------------------------------------------------------------------------------------------------------
关于params的知识
//应该就是被params修饰的参数来说,params的内容就可以随意更改但是类型要一致。
//看例子2:test的里面的int数组,被params修饰,自己可以随意添加整型的数是多少。不再固定。
//值得一提的是:但是这个要放在方法的最后面
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace params可变参数 8 { 9 class Program 10 { 11 static void Main(string[] args) 12 { 13 //int[] num = {66,99,55,44, }; 14 //Test("老王",num); 15 //Test("老王",55,55,55,9999); //从方法哪里的参数可以知道,老王后面应该是数组,但是数组的内容一旦确定就不能修改了 16 // 但是要想改变数组的内容,要在方法里加上一个params可变参数(但是可变内容的类型要与数组类型相同),但是这个要放在方法的最后面, 17 //应该就是被params修饰的参数来说,params的内容就可以随意更改但是类型要一致。 18 //看例子2:test的里面的int数组,被params修饰,自己可以随意添加整型的数是多少。不再固定。 19 //值得一提的是:但是这个要放在方法的最后面 20 // 例如要添加一个学号 21 //Console.ReadKey(); 22 int b = Sum(56, 56, 56, 56,45);//这里的Sum方法里面的参数被params修饰,那么,里面的数可以随意增减,但必须得是整形 23 Console.WriteLine(b); 24 Console.ReadKey(); 25 } 26 public static void Test(string name, params int[] score) 27 { 28 int sum = 0; 29 30 for (int i = 0; i < score.Length; i++) 31 { 32 sum += score[i]; 33 } 34 Console.WriteLine("我叫{0},我这次的总成绩{1}", name, sum); 35 36 } 37 public static int Sum(params int[] sum) 38 { 39 int a = 0; 40 for (int i = 0; i < sum.Length; i++) 41 { 42 a+=sum[i]; 43 } 44 return a; 45 //Console.WriteLine(); 46 47 } 48 } 49 }
Coding Change The World Coding Change The World Coding Change The World Coding Change The World Coding Change The World
总而言之:
out 将方法内的被修饰参数值带出去
ref 将带进入到方法里的值改变后再带出去,无视return的存在
params 主函数内可以对被修饰的参数进行毫无人道的增减