C#学习笔记②——函数

 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.委托(delegate55 委托是一种将引用存储为函数的类型。
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          }
posted @ 2012-08-26 00:16  hello破军  阅读(186)  评论(0编辑  收藏  举报