zl程序教程

您现在的位置是:首页 >  后端

当前栏目

C#学习记录——函数:定义和使用函数

c#学习 函数 记录 定义 使用
2023-09-11 14:14:49 时间

『Stay hungry, Stay foolish.』—— 乔布斯斯坦福大学毕业演讲

函数

为什么要使用函数?
某些任务常需要在一个程序中执行好几次,例如查找数组中的最大值。此时可以把几乎相同的代码块按照需要放在应用程序中,但这样存在一个问题。在某个常见任务中,即使进行非常小的改动,也需要修改多个代码块,而这些代码块可能分布在整个应用程序中。如果忘了修改其中一个代码块,就会产生很大影响。
解决这个问题的方法就是使用函数。

在C#中函数可提供在应用程序中的任何一处执行的代码块。

例如:有一个函数返回数组中的最大值,可在代码的任何位置使用这个函数,且在每个地方都使用相同的代码行。因为只需要提供一次这段代码,所以对代码的任何修改将影响使用该函数进行的计算。这个函数可以看成包含可重用的代码。
函数还可以提高代码的可读性,因为可以使用函数将相关代码组合在一起。这样应用程序主体就会非常短,因为代码的内部工作被分散了。

函数还可以用于创建多用途的代码,让它们对不同的数据执行相同的操作。可以采用参数形式为函数提供信息,以返回值的形式得到函数的结果。

定义和使用函数

函数的定义包括函数名、返回类型以及一个参数列表,这个参数列表指定了该函数需要的参数数量和参数类型。函数的名称和参数(不是返回类型)共同定义了函数的签名。
练中学:定义和使用基本函数
(1)尝试把下述代码添加到Program.cs中:

using System;

namespace L016_ConsoleApp1
{
    class Program
    {
        static void Write()
        {
            Console.WriteLine("Text output from function");
        }
        static void Main(string[] args)
        {
            Write();
            Console.ReadKey();
        }
    }
}

(2)执行代码:结果如下:
在这里插入图片描述
示例说明
下面的4行代码定义了函数Write():

static void Write()
        {
            Console.WriteLine("Text output from function");
        }

从上面示例可以看出函数定义由一下几部分组成:
1、两个关键字:static和void
2、函数名后跟圆括号,如:Write()
3、一个要执行的代码块,放在花括号内

**注意:**一般采用PascalCase形式编写函数名。
上述函数是使用关键字static和void定义的。
关键字static与面向对象的概念相关;
关键字void表明函数没有返回值;
调用函数的代码:Write();,键入函数名,后跟空括号即可。当程序执行到这行代码时,就会运行Write()函数中的代码。
注意: 在定义和调用函数时,必须使用圆括号。如果删除它们,将无法编译代码。

返回值

通过函数进行数据交换的最简单方式是利用返回值。有返回值的函数会最终计算得到这个值,就像在表达式中使用变量时,会计算得到变量包含的值一样。与变量一样,返回值也有数据类型。
例如,有个函数GetString(),其返回值是一个字符串,如下:

string myString;
myString=GetString();

当函数返回一个值时,可以采用以下两种方式修改函数:
1、在函数声明中指定返回值的类型,但不使用关键字void。
2、使用return关键字结束函数的执行,把返回值传送给调用代码。

参数

当函数接受参数时,必须指定以下内容:
1、函数在其定义中指定接受的参数列表,以及这些参数的类型。
2、在每个函数调用中提供匹配的实参列表。
注意:
仔细阅读C#规范会发现形参和实参之间存在一些细微区别:形参是函数定义的一部分,而实参则由调用代码传递给函数。

示例代码如下所示,其中可以有任意数量的参数,每个参数都有类型和名称:

static <returnType><FunctionName>(<paramType><paramName>,...)
{
...
return<returnValue>;
}

参数之间用逗号隔开。每个参数都在函数的代码中用作一个变量。
例如:下面是一个简单的函数,带有两个double参数,并返回它们的乘积:

static double Product(double param1,double param2)=>param1*param2

练一练(1):通过函数交换数据
(1)把下列代码添加到Program.cs中:

using System;

namespace L017_ConsoleApp1
{
    class Program
    {
        static int MaxValue(int[]intArray)
        {
            int maxVal = intArray[0];
            for (int i=1;i<intArray.Length;i++)
            {
                if (intArray[i] > maxVal)
                    maxVal = intArray[i];
            }
            return maxVal;
        }       
        static void Main(string[] args)
        {
            int[] myArray = { 1, 8, 3, 6, 2, 15, 9, 3, 0, 2 };
            int maxVal = MaxValue(myArray);
            Console.WriteLine($"The maximum value in myArray is {maxVal}");
            Console.ReadKey();
        }
    }
}

(2)执行代码,结果如下图:
在这里插入图片描述
练一练(2):通过带有params函数交换数据
(1)把下述代码添加到Program.cs中:

using System;

namespace L018_ConsoleApp1
{
    class Program
    {
        static int SumVals(params int[]vals)
        {
            int sum = 0;
            foreach(int val in vals)
            {
                sum += val;
            }
            return sum;
        }
        static void Main(string[] args)
        {
            int sum = SumVals(1, 5, 12, 9, 8);
            Console.WriteLine($"Summed Value={sum}");
            Console.ReadKey();
        }
    }
}

(2)执行代码,结果如图:
在这里插入图片描述