using System; namespace ConsoleApp1 { //! 5 delegate int Max(int a,int b); class Program { public void show() { } //! 1 public void max() { Console.Write(123); return; //! 2 Console.Write(321); } //! 3 public int max(int a, int b) { return a > b ? a : b; } public double max(double a, double b) { return a > b ? a : b; } static void Main(string[] args) { Program p = new Program(); //! 4 p.max(); //! 6 Max deleteMax = p.max; //! 7 Console.WriteLine(deleteMax(1, 2)); Console.WriteLine(p.max(1.5, 2.9)); } } }
1、定义函数 max
2、由于已经使用关键字 return 返回,所以后面的代码将不会执行
3、重载函数 max,重载时必须使用与已经定义的函数不同的参数。重载的函数编译器会自动匹配对应的函数
4、使用在类 Program 定义的函数 max
5、定义委托类型,类似于C的函数指针
6、创建委托变量并且初始化为 Program类的max(int,int)
7、使用委托调用函数
函数定义语法:
返回类型 名称(参数列表) { //代码段 return 返回值; }如果返回值类型为 void 那么可以不写 return 语句
delete 返回类型 名称(参数列表);委托变量必须初始化后才能调用,不然会抛出异常
如果参数数量不是固定的那么可以使用关键字 params 声明一个可变参数数组
using System; namespace ConsoleApp1 { class Program { public static int Max(int a , int b) { return a > b ? a : b; } public static int Max(int value, params int [] values) { int max = value; foreach(var val in values) { max = Max(max, val); } return max; } public static void Show(params object [] values) { for(int i = 0; i < values.Length; i++) Console.WriteLine(values[i].ToString()); } static void Main(string[] args) { Console.WriteLine( Max(1, 2, 3, 4, 5, 99, 7, 8, 9, 10)); Show(555,new Program()); } } }
可变参数数组必须准守以下几点:
1、若形参表中含一个可变参数数组,则该可变参数数组必须位于形参列表的最后2、可变参数数组必须是一维数组
3、不允许将params修饰符与ref和out修饰符组合起来使用
4、与可变参数数组对应的实参可以是同一类型的数组名,也可以是任意多个与该数组的元素属于同一类型的变量
5、若实参是数组则按引用传递,若实参是变量或表达式则按值传递
当然如果你想要参数接收看上去不同类型的参数可以使用object[]作为参数类型
其使用结果就像上面的Show函数一样