委托
把方法参数化能够把方法作为参数传进函数也称为代理,事件也是一种委托;
定义在类的最外面
关键字:delegate
函数签名:签名和函数保持一致
定义委托的时候要根据函数来定义
public delegate int First(int a,int b);
指向的方法的返回类型,需要参数必须一致!
2、定义委托变量,指向方法
委托不能被实例化,因为不是类;
First f = new JiaFa().JiaFa; //新建委托变量,指向方法,注意!!方法不需要小括号!!
第二次可以使用+=
public int JiaFa(int a,int b)
{
return a+b;
}
调用:
f(5,3);
可以理解为函数的指针,委托指向哪个函数,则这个委托就代表哪个函数
可以让函数当做参数一样进行传递
例:
//定义委托
public delegate void SuiBian(string s);
class Program
{
static void Main(string[] args)
{
// Test t1 = new Test();
//Test t2 = new Test();
//DBDA db = DBDA.DuiXiang();
//db.host = "localhost";
//DBDA db1 = DBDA.DuiXiang();
//委托
//把方法参数化
SuiBian s = China;
s += America; //+=是绑定方法 -=去掉一个方法
//事件
//事件就是一种特殊的委托
//调用语音方法
Speak(s);
Console.WriteLine();
Console.ReadLine();
}
//语音功能的方法
static void Speak(SuiBian yu)
{
yu("张三");
//if (n == 0)
//{
// America();
//}
//else if (n == 1)
//{
// China();
//}
//else if (n == 2)
//{
// HanYu();
//}
}
//语音包
public static void America(string s)
{
Console.WriteLine(s+"hello");
}
static void China(string s)
{
Console.WriteLine(s+"你好");
}
static void HanYu(string s)
{
Console.WriteLine(s+"bjdkaj");
}
}