2.11 过程与函数
C#中过程和函数没有明显的区别,两者统称为函数。一般地,我们把无返回值的称作过程,而有返回值的称作函数。过程和函数的作用是把具有特定的功能和目的的代码段放在一起的一个单元,这样做的目的是便于在其他地方调用。
■2.11.1 过程与函数的定义
C#定义过程和函数的语法分为以下5个部分:
● 作用范围:public|private
● 是否静态:static
● 返回类型:void|其他类型
● 过程与函数名称
● 参数列表
下面以计算圆柱的体积为例,说明过程与函数的定义。圆柱体积的计算公式为:
V=πr2h
公式中π为圆周率,r为圆柱底面半径,h为圆柱的高。
1 public double V(double r, double h) 2 { 3 const double pi = 3.14159; 4 return pi*r*r*h; 5 }
上述代码定义的函数V,包含半径和高两个参数,由于返回的体积也是双精度类型,所以函数定义部分V前面要加上double,而不是void。代码中第1行最前面的关键词public表示这个函数是公有的,如果是private,则表示是私有的。
■2.11.2 过程与函数的调用
在其他地方调用过程和函数时,写上过程和函数名称以及一对括号,括号内部写入传递的参数即可。
例如,我们在窗体的Load事件中调用上节的圆柱体积函数:
1 private void Form1_Load(object sender, EventArgs e) 2 { 3 double vol; 4 double R = 2, H = 10; 5 vol= V(R, H); 6 MessageBox.Show(vol.ToString()); 7 }
上述代码中,计算半径为2、高为10的圆柱的体积。其中R和H是实际参数,第5行代码调用了圆柱体积函数。当窗体启动时,对话框中显示125.6636。
调用函数时,可以在参数列表中写上形式参数,如果明确地写上形式参数名称,则各个参数的出现顺序可以不分先后。例如,“vol= V(r:R, h:H); ”表示计算半径为R、高为H的圆柱的体积;而“vol= V(h:4, r:7); ”则是计算半径为7、高为4的圆柱的体积。注意到这里故意把半径部分写在了后面,但是同样不影响计算结果。
如果定义的函数没有返回值,则在定义函数时要使用void类型,而且在函数体内部,不需要使用return来返回值。
下面的代码说明了无返回值函数的定义和调用:
1 public void过程的定义和调用() 2 { 3 proc(); //无参数过程 4 proc2(s: "hello", i: 123); //带参数过程 5 } 6 void proc() 7 { 8 result = "proc"; 9 } 10 void proc2(int i, string s) 11 { 12 result = i + s; 13 }
具有同样功能的VBA代码如下:
1 Public Sub过程的定义和调用() 2 proc '无参数过程 3 Call proc2(s:="hello", i:=123) '带参数过程 4 End Sub 5 Sub proc() 6 result = "proc" 7 End Sub 8 Sub proc2(i As Integer, s As String) 9 result = i & s 10 End Sub
下面的代码说明了函数的定义和调用:
1 public void函数的定义和调用() 2 { 3 result = c(b: 4, a: 1).ToString(); //可以颠倒参数顺序 4 } 5 int c(int a, int b) 6 { //返回2个参数的平方之差 7 return a * a - b * b; 8 }
具有同样功能的VBA代码如下:
1 Public Sub函数的定义和调用() 2 result = c(b:=4, a:=1) '可以颠倒参数顺序 3 End Sub 4 Function c(a As Integer, b As Integer) As Integer 5 '返回2个参数的平方之差 6 c = a * a - b * b 7 End Function