1.委托的定义: delegate 关键词, 委托就是一个没有注明具体内容的方法, 这样可以先调用, 后期再赋予它具体的方法
例:
//定义一个无返回值的公共委托
pulice delegate void 委托()
调用:
//方法有可能为空, 如果后期没赋值那么就必须要判断
if(委托!=null)
{
委托();
}
2. 系统提供了一个类名为 Action 无参数无返回值的委托, 可以不用再定义这种委托而直接调用,支持泛型参数
例:
//无参数
Action action = 系统提供的Action委托方法;
//泛型参数
public void 方法()
{
Action action<string> = 系统提供的Action委托方法;
}
public void 系统提供的Action委托方法(string s)
{
}
3. 系统还提供了一个类名为Func 有返回参数的默认委托,其中最后一个参数一定是返回值的类型
例:
public void 方法()
{
Func func<string,string,string> = 系统提供的Action委托方法;
}
public string 系统提供的Func 委托方法(string s1, string s2)
{
return s1
}
4.委托还支持多播, 用"+="的符号链接, 其中Func需要获取他每一个方法的返回值需要从数组中循环逐个获取
Func<string> func = 系统提供的func委托方法;
func+=系统提供的func委托方法2;
func+=系统提供的func委托方法3;
Delegate[] delegates = func.GetInvocationList();
foreach (Func<string> f in delegates)
{
//遍历可获得函数的返回值,否则 直接执行func只能获得最后一个函数的返回值
f();
}
5. 匿名委托
//不用额外创建方法, 直接用delegate临时创建一个方法给委托
Action m= delegate(){ message("你好") }