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函数一样