CS2L6——函数基础

本章代码关键字

1
return        //可以结束函数的执行,并返回其后边的值给外部

函数(方法)

函数(方法)本质是一块具有名称的代码块,可以使用函数(方法)的名称来执行该代码块。
函数(方法)是封装代码进行重复使用的一种机制

函数(方法)的主要作用:

  • 封装代码
  • 提升代码复用率
  • 抽象化行为

例如,Main​ 就是一个函数,在程序启动时调用,为程序的起点,
其中 Console.WriteLine()​ 就是调用的 Console​ 类中的 WriteLine()​ 函数

1
2
3
4
static void Main(string[] args)
{
Console.WriteLine("函数")
}

函数写在 class​ 或者 struct​ 里,return​ 可以提前结束函数逻辑 程序是线性执行的

函数写在哪里

一定写在 class​ 语句块 和 struct​ 语句块中!!!

函数基本语法

1
2
3
4
5
6
7
8
9
10
//1      2       3      4
static 返回类型 函数名 (参数类型 参数名1,参数类型 参数名2,...)
//5
{
写函数的代码逻辑;
写函数的代码逻辑;
......
写函数的代码逻辑;
return 返回值;(如果有返回类型才返回)
}
  1. 关于 static​,这不是必须的,但在没有学结构体和类之前, static​ 必须要写的

  2. 关于返回类型 引出一个新的关键字 void​,它表示函数没有返回值

    而返回类型可以写 任意的14种变量类型 + 复杂数据类型(数组、枚举、结构体、类 class​)

  3. 关于函数名 使用帕斯卡命名法命名 即每个单词首字母都大写

  4. 参数不是必须的,可以有0~n个参数,参数的类型也是任意的:
    任意的14种变量类型 + 复杂数据类型(数组、枚举、结构体、类 class​),多个参数需要用逗号隔开
    参数名也是用驼峰命名法

  5. 当返回值类型不是 void​ 时 必须通过 return​ 来返回对于类型的内容 (注意即使是 void​ 也可以选择性使用 return​)

函数实际运用

  • 无参无返回值

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    static void SayHallo()
    {
    Console.WriteLine("Hallo world!");
    //返回值类型是void时,return可省略
    }

    static void Main(string[] args)
    {
    SayHallo();
    }

    输出:

    1
    Hallo world!
  • 有参无返回值函数

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    //有参无返回值函数
    static void SayYourName(string name)
    {
    Console.WriteLine("你的名字是:{0}", name);
    }

    static void Main(string[] args)
    {
    //传入一个string常量
    SayYourName("MrTang");
    //传入一个string变量
    string str = "MrTang";
    SayYourName(str);
    }

    输出:

    1
    2
    你的名字是:MrTang
    你的名字是:MrTang
  • 无参有返回值函数

    有返回值的函数要不直接拿返回值使用,要不就是拿变量接收结果,
    虽然可以直接调用而不接收返回值,但是这样返回值就没有用了

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    //有参无返回值函数
    static void SayYourName(string name)
    {
    Console.WriteLine("你的名字是:{0}", name);
    }

    //无参有返回值函数
    static string WhatYourName()
    {
    return "MrTang";
    }

    static void Main(string[] args)
    {
    //传入一个返回值是string的函数
    SayYourName(WhatYourName());
    //有返回值的函数要不直接拿返回值使用
    //要不就是拿变量接收结果
    //虽然可以直接调用,但是这样返回值就没有用了
    }

    输出:

    1
    你的名字是:MrTang
  • 有参有返回值函数

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    //有参有返回值函数
    static int Sum(int a, int b)
    {
    //int c = a + b
    //return c
    //return右边也可以写表达式甚至是函数,会先将表达式计算完毕再return
    return a + b;
    }

    static void Main(string[] args)
    {
    Console.WriteLine(Sum(1, 2));
    }

    输出:

    1
    3
  • 有参有多返回值函数

    可以使用数组返回多个数,但是使用者需要知道这个数组的规则

    C# 7 及以上的版本,可以使用元组来返回多返回值,详见:CS5L9——CSharp 7 功能和语法 的元组部分

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    //有参有多返回值函数(缺点:多返回值以数组的形式返回出去,使用者需要知道这个数组的规则)
    //例如:传入两个数 计算他们的和以及他们的平均数 得出结果返回出来
    static int[] Calc(int a, int b)
    {
    int sum = a + b;
    int avg = sum / 2;
    //int [] arr = { sum, avg };
    //return arr;
    //不能是return {sum, avg},因为这种没有申明一个数组!!!
    return new int[] { sum, avg };
    }

    static void Main(string[] args)
    {
    int[] arr = Calc(5, 7);
    Console.WriteLine(arr[0] + " " + arr[1]);
    }

    输出:

    1
    总和为:12,平均值为:6

关于return

即使函数没有返回值,我们也可以使用return​,return可以直接结束函数,不执行之后的代码,直接返回到函数外部

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
static void Speak(string str)
{
if (str == "混蛋") {
return;
}
Console.WriteLine(str);
}

static void Main(string[] args)
{
//传入一个string变量
string str = "MrTang";

Speak("混蛋");
Speak(str);
}

输出:

1
MrTang