1.params:可以直接使用一组对象作为参数
{
//计算平均分数
double avg = GetAvg(100, 95, 85,90);
Console.WriteLine(avg);
Console.ReadKey();
}
//一般做法是先构造一个对象数组,然后将此数组作为方法的参数,而使用了params修饰方法参数后,我们可以直接使用一组对象作为参数
// 当然这组参数需要符合调用的方法对参数的要求
private static double GetAvg(params int[] score)
{
double sum = 0;
for (int i = 0; i < score.Length; i++)
{
sum += score[i];
}
return sum / score.Length;
}
**2.ref:在方法中对参数所做的任何更改都将反映在该变量中(引用传递)
- 若要使用 ref 参数,则方法定义和调用方法都必须显式使用 ref 关键字。传递到 ref 参数的参数必须最先初始化。这与 out 不同,out 的参数在传递之前不需要显式初始化.
- 属性不是变量,因此不能作为 ref 参数传递。
- 尽管 ref 和 out 在运行时的处理方式不同,但它们在编译时的处理方式是相同的。因此,如果一个方法采用 ref 参数,而另一个方法采用 out 参数,则无法重载这两个方法。
{
//有ref及没有用ref的对比,参数的变化
int salary1 = 5000;
int salary2 = 5000;
JiangLi(salary1);
FaKuan(ref salary2);
Console.WriteLine(salary1);
Console.WriteLine(salary2);
Console.ReadKey();
}
private static void JiangLi(int s)
{
s += 500;
}
private static void FaKuan(ref int s)
{
s += 500;
}
3.out:能够返回多个值,直接显示在面板上
{
//求数组的最大值、最小值、累加和、平均值
int[] nums = { 1,2,3,4,5,6,7,8,9};
int max, min, sum, avg;
bool b;
string s;
double d;
GetMaxMinSumAvgs(nums, out max,out min,out sum,out avg,out b,out s,out d);
Console.WriteLine(max);
Console.WriteLine(min);
Console.WriteLine(sum);
Console.WriteLine(avg);
Console.WriteLine(b);
Console.WriteLine(s);
Console.WriteLine(d);
Console.ReadKey();
}
private static void GetMaxMinSumAvgs(int[] nums, out int max, out int min, out int sum, out int avg,out bool b,out string s,out double d)
{
b = true;
s = "你好";
d = 3.14;
max = nums[0];
min = nums[0];
sum = 0;
for (int i = 0; i < nums.Length; i++)
{
if (max<nums[i])
{
max = nums[i];
}
if (min>nums[i])
{
min = nums[i];
}
sum += nums[i];
}
avg = sum / nums.Length;
}