您的位置:首页 > 编程语言 > C#

C#回顾学习笔记十六:out、ref和params参数

2017-09-21 14:01 435 查看
1)out参数
如果在一个方法中,返回多个相同类型的值的时候,可以用一个数组,如果返回多个不同类型的值的时候,返回数组就不行了,这时候可以用out参数,out参数侧重于在一个方法中返回多个不同类型的值或者多个相同类型的值。一句话:out参数可以一次返回多个不同类型的值。

2)ref参数

能将一个变量带入一个方法中进行改变,改变完成后,再将改变后的值带出方法用ref的好处是不用再写返回值ref参数要求在方法外必须赋值,而方法内可以不赋值。

3)params可变参数

将实参列表中跟可变参数数组类型一致时的元素都当成数组的元素处。一句话:原本要传入数组参数的改为传入单个元素,然后在方法接收参数时加上params参数,可将所有类型一致的元素处理为一个数组。

下面通过例子演示三个参数的使用方法

一、out参数演示

class Program
{
static void Main(string[] args)
{
int[] nums = { 15, 21, 23, 12, 18 };
int max;
outTest(nums, out max);
Console.WriteLine("数组最大值是{0}", max);
Console.ReadKey();
}
static void outTest(int[] nums, out int max)
{
max = nums[0];
for (int i = 0; i < nums.Length; i++)
{
if (nums[i] > max)
{
max = nums[i];
}
}
}
}
在上面的代码中,先在主函数声明一个变量max,可以不赋初值。在方法内的参数前加上out,并在方法内部给变量max赋值,这样方法在执行完之后这个max值会自动返回到主函数并影响主函数的变量max的值。使用out参数可以发现不需要写返回值也可以从方法返回值到主函数,平时写返回值只能返回一个类型的值,但如果在方法传参位置加上out,并注意两点:①主函数必须先声明相应的变量(可以不赋初值)②方法体内必须对加有out参数的变量赋初值。这样方法在执行完之后,带有out参数的变量值自动会影响主函数相应变量的值。

二、ref参数演示

class Program
{
static void Main(string[] args)
{
int[] nums = { 15, 21, 23, 12, 18 };
int max = 0;
outTest(nums, ref max);
Console.WriteLine("数组最大值是{0}", max);

4000
Console.ReadKey();
}
static void outTest(int[] nums, ref int max)
{
for (int i = 0; i < nums.Length; i++)
{
if (nums[i] > max)
{
max = nums[i];
}
}
}
}
与上面out参数的使用目的一样,都是用于不写返回值类型也可以自动返回需要的值。使用方式大同小异,ref与out使用方式不同之处也就在于:指定ref的变量需要在声明时就赋初值,而在方法内不需要赋初值。指定out的变量在声明时不需要赋初值,但在方法内部需要先赋初值

三、params参数演示

class Program
{
static void Main(string[] args)
{
string name = "李显堂";
Sum(name, 56, 78, 67, 69, 21);
Console.ReadKey();
}
public static void Sum(string name, params int[] nums)
{
int sum = 0;//统计总成绩的变量
for (int i = 0; i < nums.Length; i++)
{
sum += nums[i];
}
Console.WriteLine("{0}这次总成绩为{1}", name, sum);
}
}
这个例子主要是调用方法,统计学生的总成绩。在自定义的Sum()方法的参数里,第二个参数加上了params。然后观察主函数如何调用Sum()方法的,在传入第一个参数name后,其他要传入的各科成绩只需要用逗号隔开,这样在调用参数时会自动识别出变量name后的所有数字都是一个数组。这样做的好处是当学生要计算总分的科目增多或者减少,不需要刻意去声明数组或者修改数组的长度、成员的值,那样显得更加麻烦。因此用params参数,可以让程序自动识别哪些值属于一个数组。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: