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          }

你可能感兴趣的:(学习笔记)