C#基础——(变量的作用域 、方法重载 、有多个返回值的方法 、有多个参数的方法 、可变数组)

目录

 

1、变量的作用域——局部变量

2、方法的重载

3、有多个返回值的方法

4、有多个参数的方法

5、可变数组——params数组


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时,可以插入任何类型的

猜你喜欢

转载自blog.csdn.net/make_1998/article/details/88722841