1 9.函数
2 a.参数:1).调用函数时,必须使参数与函数定义中指定的参数完全匹配。
3 2).参数数组:使用params定义参数数组,参数数组必须是函数定义中的最后
4 一个参数,可以使用个数不定参数调用函数。
5 例如:class
6 {
7 static int SumVals(params int[] vals){
8 int sum = 0;
9 foreach (int val in vals){
10 sum += val;
11 }
12 return sum;
13 }
14 }
15 static void Main(string[] args){
16 int sums = SumVals{1, 2, 3, 4};
17 Console.writeLine("Summed Values = {0}", sums);
18 }
19 3).使用ref关键字指定参数,使函数处理的变量与函数调用中使用的变量相同,
20 因此,对变量进行任何的改变都会影响用作参数的变量值。
21 例:class{
22 static void ShowDouble(ref int val){
23 val *= 2;
24 Console.WriteLine("val doubled = {0}", val);
25 }
26 int myNumber = 5;
27 Console.WriteLine("myNumber = {0}", myNumber);
28 ShowDouble(ref myNumber);
29 Console.WriteLine("myNumber = {0}", myNumber);
30 }
31 myNumber被ShowDouble()改变
32 ref的限制:非常量const
33 修饰的变量必须初始化(赋值)
34 4).使用out修饰输出参数,使用方法与ref参数相同
35 与ref区别:ref参数必须赋值,但可以把未赋值的变量作为out参数,
36 但可以把已赋值的变量作为out参数,存储在该变量中的值会在
37 函数执行时丢失。
38 b.结构函数
39 把函数添加到结构中,可以简化任务处理过程。
40 struct customerName
41 {
42 public string firstName, lastName;
43
44 public string Name ()
45 {
46 return first + " " + lastName;
47 }
48 }
49
50 customerName myCustomer;
51 myCustomer.firstName = "John";
52 myCustomer.lastName = "Franklin";
53 Console.WriteLine(mycustomer.Name());
54 c.委托(delegate)
55 委托是一种将引用存储为函数的类型。
56 class Program
57 {
58 delegate double ProcessDelegate(double param1, double param2);
59
60 static double Multiply(double param1, double param2)
61 {
62 return param1*param2;
63 }
64 static double Divide(double param1, double param2)
65 {
66 return param1/param2;
67 }
68
69 static void Main(string[] args)
70 {
71 ProcessDelegate process;
72 Console.WriteLine("Enter 2 numbers separated with a comma:");
73 string input = Console.ReadLine();
74 int commaPos = input.IndexOf(',');
75 double param1 = Convert.ToDouble(input.Substring(0, commaPos));
76 double param2 = Convert.ToDouble(input.Substring(commaPos + 1,
77 input.Length - commaPos - 1));
78 Console.WriteLine("Enter M to mutiply or D to devide:");
79 input = Console.ReadLine();
80 if (input == "M")
81 process = new processDelegate(Multiyply);
82 else
83 process = new processDelegate(Divide);
84 Console.WriteLine("Result: {0}", process(param1, param2));
85 Console.ReadKey();
86 }
87 }