C#函数的声明和使用(附带实例)
所谓的函数(function),其实就是由一系列指令语句组合而成的,它的目的有两个。
首先,当我们在设计一个大型程序时,若是能将这个程序的功能分割成较小的功能,然后再依据这些小功能的要求撰写函数,那么这样不仅使程序简单化,同时也使得最后的调试变得容易。而这些小的函数,就是建构模块化、设计大型应用程序的基石。
其次在一个程序中,也许会发生某些指令被重复地书写在程序各个不同地方的情况,若是我们能将这些重复的指令撰写成一个函数,需要时再加以调用,那么这样不仅减少编辑程序时间,同时更可使程序精简、清晰、明了。
下面是调用函数的基本流程图:
当一个程序在调用函数时,C# 语言会自动跳到被调用的函数上执行工作,执行完后,C# 语言会回到原先程序执行的位置,然后继续执行下一道指令。
例如,函数声明是
实例中,函数参数的设计方式如下:
此外,原先变量的 i 和 j,并不会因为调用 Larger() 函数,程序的主控权移交给 Larger() 函数而影响自己的内容。
C# 语言允许函数有多个参数,也允许各参数有不同数据类型,可以参考下列实例。
但毕竟在真实的程序设计中,没有回传值的函数仍是少数,一般函数设计,经常都会要求函数能回传某些值给调用语句,此时我们可用 return 达成这个任务。
例如,设计加法函数,然后回传加法的计算结果。
上述函数是比较正规的写法,许多程序设计师,有时会将简单的表达式直接当作回传值:
首先,当我们在设计一个大型程序时,若是能将这个程序的功能分割成较小的功能,然后再依据这些小功能的要求撰写函数,那么这样不仅使程序简单化,同时也使得最后的调试变得容易。而这些小的函数,就是建构模块化、设计大型应用程序的基石。
其次在一个程序中,也许会发生某些指令被重复地书写在程序各个不同地方的情况,若是我们能将这些重复的指令撰写成一个函数,需要时再加以调用,那么这样不仅减少编辑程序时间,同时更可使程序精简、清晰、明了。
下面是调用函数的基本流程图:

当一个程序在调用函数时,C# 语言会自动跳到被调用的函数上执行工作,执行完后,C# 语言会回到原先程序执行的位置,然后继续执行下一道指令。
C#函数的声明
函数(又称方法)声明的语法如下:函数类型 函数名称(数据类型 参数 1,数据类型 参数 2,......,数据类型 参数 n) { ...... }函数类型代表函数的回传值数据类型,其可以是 C# 语言中任一个数据类型。另外,有时候某个程序在调用函数时,并不期待这个函数值回传任何参数,此时,可以将这个函数声明成 void 类型。
例如,函数声明是
void Output()
,void 代表没有回传值。C#函数的参数
先看一个实例,这个程序在执行时,会要求你输入两个整数,主程序会将这两个参数传入函数 Larger() 判别大小,然后输出较大值,要是两数相等,则输出两数值相等。void Larger(int a, int b) { if (a < b) Console.WriteLine($"较大值是 {b}"); else if (a > b) Console.WriteLine($"较大值是 {a}"); else Console.WriteLine("两数值相等"); } Console.Write("请输入数值 1 : "); int i = Convert.ToInt32(Console.ReadLine()); Console.Write("请输入数值 2 : "); int j = Convert.ToInt32(Console.ReadLine()); Larger(i, j);执行结果为:
请输入数值 1 : 8
请输入数值 2 : 5
较大值是 8
实例中,函数参数的设计方式如下:
void Larger(int a, int b){ ...... }实例中的 Larger() 函数被调用后,会将所接收的参数 a 和 b 复制一份,存到函数所使用的内存内,当函数 Larger() 执行结束后,a 和 b 所占用的内存会被释放回系统。
此外,原先变量的 i 和 j,并不会因为调用 Larger() 函数,程序的主控权移交给 Larger() 函数而影响自己的内容。
C# 语言允许函数有多个参数,也允许各参数有不同数据类型,可以参考下列实例。
using System; void PrintChar(int loop, char ch) { for (int i = 0; i < loop; i++) Console.Write($"{ch}"); Console.WriteLine(); } Console.Write("请输入重复次数 : "); int times = Convert.ToInt32(Console.ReadLine()); Console.Write("请输入字符 : "); char mychar = Convert.ToChar(Console.Read()); PrintChar(times, mychar);执行结果为:
请输入重复次数 : 5
请输入字符 : A
AAAAA
C#函数的返回值
在前面的所有程序范例中,声明类型是 void 的函数都不必回传任何值,因此在函数结束时,我们用右大括号“}”表示函数结束。但毕竟在真实的程序设计中,没有回传值的函数仍是少数,一般函数设计,经常都会要求函数能回传某些值给调用语句,此时我们可用 return 达成这个任务。
例如,设计加法函数,然后回传加法的计算结果。
int Add(int a, int b) { int sum = a + b; return sum; } Console.Write("请输入数值 1 : "); int x = Convert.ToInt32(Console.ReadLine()); Console.Write("请输入数值 2 : "); int y = Convert.ToInt32(Console.ReadLine()); int total = Add(x, y); Console.WriteLine($"{x} + {y} = {total}");执行结果为:
请输入数值 1 : 8
请输入数值 2 : 7
8 + 7 = 15
上述函数是比较正规的写法,许多程序设计师,有时会将简单的表达式直接当作回传值:
int Add(int a, int b) { return a + b; } Console.Write("请输入数值 1 : "); int x = Convert.ToInt32(Console.ReadLine()); Console.Write("请输入数值 2 : "); int y = Convert.ToInt32(Console.ReadLine()); int total = Add(x, y); Console.WriteLine($"{x} + {y} = {total}");程序第 3 行替换了前面实例的第 3~4 行,实现的功能是相同的。
C#函数的实际应用
设计加法和乘法函数,如果输入 1 则表示选择加法,如果输入 2 则表示选择乘法,如果输入其他值则会输出“计算方式选择错误”。选择好计算方式后,可以输入两个数值,然后执行计算。int Add(int a, int b) { return a + b; } int Mul(int c, int d) { return c * d; } Console.WriteLine("请输入 1 或 2 选择计算方式"); Console.WriteLine("1 : 加法运算"); Console.WriteLine("2 : 乘法运算"); Console.Write("===> "); int index = Convert.ToInt32(Console.ReadLine()); Console.Write("请输入数值 1 : "); int x = Convert.ToInt32(Console.ReadLine()); Console.Write("请输入数值 2 : "); int y = Convert.ToInt32(Console.ReadLine()); if (index == 1) Console.WriteLine($"{x} + {y} = {Add(x, y)}"); else if (index == 2) Console.WriteLine($"{x} * {y} = {Mul(x, y)}"); else Console.WriteLine("计算方式选择错误");执行结果为:
请输入 1 或 2 选择计算方式
1 : 加法运算
2 : 乘法运算
===> 1
请输入数值 1 : 5
请输入数值 2 : 9
5 + 9 = 14