目录
1、变量的作用域——局部变量
从方法中定义的变量称为局部变量,作用域是从定义开始,到这个方法的结束
例子如下所示:方法Test里面的a会报错,因为这里的a不存在,而在上面的主函数中定义的a是局部变量,不能再test方法中使用
static void Main(string[] args)
{
int a = 3;
Test();
Console.WriteLine(a);
Console.ReadKey();
}
static void Test()
{
a = a + 5;//这里的a会报错
}
那么怎么解决这种问题呢,通过2种方法:传参和设置返回值,例子见另一篇博客中的方法类型
2、方法的重载
① 什么是方法的重载
方法重载是指在一个类中定义多个同名的方法,但要求每个方法具有不同的参数的类型或参数的个数。
② C#中如何查看该方法是否有重载
将鼠标放到调用方法的单词上,会看到如图所示
③ 构成方法重载的条件
有着同样的方法名,参数类型或参数个数不同,与返回值无关
3、有多个返回值的方法
上一篇博客说了方法的四个类型,但是都是已有一个返回值,那么怎么实现多个返回值呢?
将方法的返回值设置为一个数组,便有多个返回值
例子:利用方法求和,求最大值,求最小值
static void Main(string[] args)//主过程
{
int[] nums = new int[] { 23, 25, -124, 145 };//定义要计算的数组
int[] arraynumbers = ArraySumAndMaxOrMin(nums);//调用计算的方法,使用数组来接受返回值
Console.WriteLine("最小值为{0},最大值为{1},和为{2}", arraynumbers[0], arraynumbers[1], arraynumbers[2]);
Console.ReadKey();
}
public static int[] ArraySumAndMaxOrMin(int[] numbers)//返回值为数组——int[]
{
int[] array = new int[3];//定义一个返回值的数组
array[0] = int.MaxValue;//返回数组的第一个数为最小值,先设为int的最大值
array[1] = int.MinValue;//返回数组的第二个数为最大值,先设为int的最小值
array[2] = 0;////返回数组的第三个数为和,先设为0
for (int i = 0; i < numbers.Length; i++)//进行要计算的数组的循环
{
if (numbers[i] < array[0])
{
array[0] = numbers[i];//最小值的转换
}
if (numbers[i] > array[1])
{
array[1] = numbers[i];//最大值的转换
}
array[2] += numbers[i];//计算和
}
return array;//返回数组
}
4、有多个参数的方法
上一篇博客说了方法的四个类型,但是都是已有一个参数,那么怎么实现多个参数呢?
使用out传值或ref传值
① out传值——输出参数
out传值注意点:
若要使用 out 参数,方法定义和调用方法都必须显式使用 out 关键字。
必须在方法中对out赋值,不要求被传入前初始化
out传值的例子:
static void Main(string[] args)//主过程
{
int[] nums = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int max;
int min;
int sum = ArraySum(nums, out max, out min);//使用out传值的,都加了out关键字
Console.WriteLine("和为{0},最大值为{1},最小值{2}", sum, max, min);//out传值的参数,可以直接传出
Console.ReadKey();
}
public static int ArraySum(int[] numbers, out int max, out int min)//方法只有1个返回值,但是out max一样可以传出
{
max = int.MinValue;//给max赋值,为int类型的最小值
min = int.MaxValue;//给min赋值,为int类型的最大值
int sum = 0;
for (int i = 0; i < numbers.Length; i++)
{
if (max < numbers[i])
{
max = numbers[i];//转换最大值
}
if (min > numbers[i])
{
min = numbers[i];//转换最小值
}
sum += numbers[i];//求和
}
return sum;
}
out传值的特点:
使用out传值的参数,可以直接传出
可以有多个不同类型的参数
② ref传参——引用参数
ref传值注意点:
若要使用 ref 参数,方法定义和调用方法都必须显式使用 ref 关键字。
无需方法中对ref 赋值,要求被传入前初始化
out传值的例子:
static void Main(string[] args)
{
int num = 9;
int num1 = Show(ref num);//使用ref传值的,加了ref关键字
Console.WriteLine(num);
Console.WriteLine(num1);
Console.ReadKey();
}
public static int Show( ref int number)
{
number = 10;//给ref传值的参数赋值
return number + 10;
③ out传参和ref传参的异同
同:
都能返回多个返回值。
若要使用 ref 和out参数,则方法定义和调用方法都必须显式使用 ref和out 关键字。在方法中对参数的设置和改变将会直接影响函数调用之处(参数的初始值)。
ref指定的参数在函数调用时候必须初始化,不能为空的引用。而out指定的参数在函数调用时候可以不初始化;
out指定的参数在进入函数时会清空自己,必须在函数内部赋初值。而ref指定的参数不需要。
ref有进有出,out只出不进。
5、可变数组——params数组
public static void Show(string str,params string []strs)//定义一个方法,里面的第二个参数为string类型的可变数组
{
switch (strs.Length)
{
case 0:Console.WriteLine("数组没有参数");break;//如果可变数组的长度为0,那么没有参数,以此类推
case 1: Console.WriteLine("数组有一个参数"); break;
case 2: Console.WriteLine("数组有两个参数"); break;
case 3: Console.WriteLine("数组有三个参数"); break;
}
}
static void Main(string [] args)
{
Show("43");
Show("43", "2");
Show("43", "r","2");
Show("43", "r", "2","r");
Console.ReadKey();
}
结果为:
当为object string []strs时,可以插入任何类型的