using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
/*
* ref与out的用法
* ref:
* ref关键字使参数按引用传递,其效果是,当控制权传递回调用方法时,在方法中对参数任何更改都将反映在该变量中,若要使用ref参数,则方法定义和调用方法都必须显示使用ref关键字
* ref值必须先进行初始化(赋值):改变外部,变量会一起改变
* ref就相当于C++里面的引用
* out:
* 若要使用out参数,方法定义和调用方法都必须显示使用out关键字
* out值可以不初始化,必须在函数体进行赋值
* out就是向外传值
* ref与out的异同点:
* 相同点:
* 既可以通过值也可以通过引用传递参数,通过引用传递参数允许函数成员更改参数的值,并保持该更改,若要通过引用传递参数,可使用ref或out关键字,ref和out这两个关键字都能够提供相似的功效,其作用也很像C中的指针变量
* 区别:
* 1.使用ref型参数时,传入的参数必须先被初始化,对out而言,必须在方法中对其完成初始化;
* 2.使用ref和out时,在方法的参数和执行方法时,都要加ref或out关键字,以满足匹配哦;
* 3.out适合用在需要return多个返回值的地方,而ref则用在需要被调用的方法修改调用者的引用的时候;
*
*
*/
namespace ConsoleApplication2
{
class Program
{
#region
//static void Main(string[] args)
//{
// //ref值必须先进行初始化(赋值)
// int numOne = 10;
// int numTwo = 20;
// //函数调用ref关键词
// refNum(ref numOne,ref numTwo);
// Console.WriteLine("num=" + numOne);
// Console.WriteLine("num=" + numTwo);
// //out值可以不初始化
// int numThree = 1;
// int numFour;
// outNum(out numThree,out numFour);
// Console.WriteLine("num=" + numThree);
// Console.WriteLine("num=" + numFour);
// Console.ReadKey();
//}
ref用法,函数定义注意ref关键词
//public static void refNum(ref int a, ref int b)
//{
// //改变外部变量会一起改变
// a++;
// b++;
//}
out用法,函数定义注意out关键词
//public static void outNum(out int a, out int b)
//{
// //必须在函数体进行赋值
// a = 10;
// b = 20;
//}
#endregion
#region//求最大最小值以及求和
//static void Main(string[] args)
//{
// int readNumOne = int.Parse(Console.ReadLine());
// int readNumTwo = int.Parse(Console.ReadLine());
// int maxNum;
// int minNum;
// int sumNum;
// Sum(readNumOne,readNumTwo,out maxNum,out minNum,out sumNum);
// Console.WriteLine("最大值=" + maxNum + "最小值=" + minNum + "和=" + sumNum);
// Console.ReadKey();
//}
//public static void Sum(int a, int b, out int A, out int B, out int AB)
//{
// if (a > b)
// {
// A = a;
// B = b;
// }
// else
// {
// A = b;
// B = a;
// }
// AB = a + b;
//}
#endregion
#region//求奇数偶数
//static void Main(string[] args)
//{
// int[] num = new int[10] { 0,1,2,3,4,5,6,7,8,9};
// int[] numJ;
// int[] numO;
// JiOu(num, out numJ, out numO);
// for (int i = 0; i < numO.Length; i++)
// {
// Console.WriteLine("偶数值=" + numO[i]);
// }
// for (int i = 0; i < numJ.Length; i++)
// {
// Console.WriteLine("奇数值=" + numJ[i]);
// }
// Console.ReadKey();
//}
//public static void JiOu(int[] nums,out int[] j,out int[] o)
//{
// j = new int[5];
// o = new int[5];
// int indexJ = 0;
// int indexO = 0;
// for (int i = 0; i < nums.Length; i++)
// {
// if (nums[i] % 2 != 0)
// {
// j[indexJ] = nums[i];
// indexJ++;
// }
// else
// {
// o[indexO] = nums[i];
// indexO++;
// }
// }
//}
#endregion
}
}
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
/*
* ref与out的用法
* ref:
* ref关键字使参数按引用传递,其效果是,当控制权传递回调用方法时,在方法中对参数任何更改都将反映在该变量中,若要使用ref参数,则方法定义和调用方法都必须显示使用ref关键字
* ref值必须先进行初始化(赋值):改变外部,变量会一起改变
* ref就相当于C++里面的引用
* out:
* 若要使用out参数,方法定义和调用方法都必须显示使用out关键字
* out值可以不初始化,必须在函数体进行赋值
* out就是向外传值
* ref与out的异同点:
* 相同点:
* 既可以通过值也可以通过引用传递参数,通过引用传递参数允许函数成员更改参数的值,并保持该更改,若要通过引用传递参数,可使用ref或out关键字,ref和out这两个关键字都能够提供相似的功效,其作用也很像C中的指针变量
* 区别:
* 1.使用ref型参数时,传入的参数必须先被初始化,对out而言,必须在方法中对其完成初始化;
* 2.使用ref和out时,在方法的参数和执行方法时,都要加ref或out关键字,以满足匹配哦;
* 3.out适合用在需要return多个返回值的地方,而ref则用在需要被调用的方法修改调用者的引用的时候;
*
*
*/
namespace ConsoleApplication2
{
class Program
{
#region
//static void Main(string[] args)
//{
// //ref值必须先进行初始化(赋值)
// int numOne = 10;
// int numTwo = 20;
// //函数调用ref关键词
// refNum(ref numOne,ref numTwo);
// Console.WriteLine("num=" + numOne);
// Console.WriteLine("num=" + numTwo);
// //out值可以不初始化
// int numThree = 1;
// int numFour;
// outNum(out numThree,out numFour);
// Console.WriteLine("num=" + numThree);
// Console.WriteLine("num=" + numFour);
// Console.ReadKey();
//}
ref用法,函数定义注意ref关键词
//public static void refNum(ref int a, ref int b)
//{
// //改变外部变量会一起改变
// a++;
// b++;
//}
out用法,函数定义注意out关键词
//public static void outNum(out int a, out int b)
//{
// //必须在函数体进行赋值
// a = 10;
// b = 20;
//}
#endregion
#region//求最大最小值以及求和
//static void Main(string[] args)
//{
// int readNumOne = int.Parse(Console.ReadLine());
// int readNumTwo = int.Parse(Console.ReadLine());
// int maxNum;
// int minNum;
// int sumNum;
// Sum(readNumOne,readNumTwo,out maxNum,out minNum,out sumNum);
// Console.WriteLine("最大值=" + maxNum + "最小值=" + minNum + "和=" + sumNum);
// Console.ReadKey();
//}
//public static void Sum(int a, int b, out int A, out int B, out int AB)
//{
// if (a > b)
// {
// A = a;
// B = b;
// }
// else
// {
// A = b;
// B = a;
// }
// AB = a + b;
//}
#endregion
#region//求奇数偶数
//static void Main(string[] args)
//{
// int[] num = new int[10] { 0,1,2,3,4,5,6,7,8,9};
// int[] numJ;
// int[] numO;
// JiOu(num, out numJ, out numO);
// for (int i = 0; i < numO.Length; i++)
// {
// Console.WriteLine("偶数值=" + numO[i]);
// }
// for (int i = 0; i < numJ.Length; i++)
// {
// Console.WriteLine("奇数值=" + numJ[i]);
// }
// Console.ReadKey();
//}
//public static void JiOu(int[] nums,out int[] j,out int[] o)
//{
// j = new int[5];
// o = new int[5];
// int indexJ = 0;
// int indexO = 0;
// for (int i = 0; i < nums.Length; i++)
// {
// if (nums[i] % 2 != 0)
// {
// j[indexJ] = nums[i];
// indexJ++;
// }
// else
// {
// o[indexO] = nums[i];
// indexO++;
// }
// }
//}
#endregion
}
}