委托是一个类
可以把一个方法当作另一个方法的参数使用。
声明委托:delegate string 委托名(参数列表);
使用委托的函数 返回值和参数列表与委托相同
使用委托: 委托名 委托变量名=new 委托(函数名); 委托变量名(参数列表);
例子:
delegate string de1(string name,int age);//定义
static string CN(string name, int age)
{
return name + " 的年龄是 " + age;
}
static string EN(string name, int age)
{
return name + " is " + age + " years old";
}
de1 de = new de1(CN);//使用或 de1 de = CN;
de("",1);
=========
多播委托
包含多个方法的委托;按顺序调用,返回值必须void(否则返回最后调用方法的值);其中一个发生异常,不再继续向下执行;
de1 de = new de1(CN);//使用
de += EN;//连续调用第二个
de("",1);
发生异常也向下执行 使用GetInvocationList()方法
de1 de = new de1(CN);//使用
de += EN;//连续调用第二个
Delegate[] des = de.GetInvocationList();
foreach (de1 item in des)//循环
{
try
{
str += item("liu", 1);
}
catch (Exception)
{
str += "有错误";
}
}
==========
匿名方法的委托
delegate string de1(string name, int age);
de1 de = delegate(string name, int age)
{
return name + " 的年龄是 " + age;
};
str= de("liu",1);
==========
泛型Action<T>委托表示引用一个void返回类型的方法
例子:
Action<int> Get;
Get = qq;
Get(12);
public static void qq(int i)
{
}
泛型Func<in T,out TResult>允许调用带返回类型的方法
Func<int, string> Get;
Get = qq;
Get(12);
public static string qq(int i)
{
return "你输入的数字是:" + i;
}