委托
委托是一种类型,允许将方法当成参数使用。可以降低程序的耦合性。一个委托中可以添加多个方法,但返回值类型,参数数量、类型必须与委托一致。
//使用关键词delegate声明
public delegate void SayHandler(string name);
//定义方法
public void Say(string name)
{
Console.Write(name);
}
//实例化委托,将方法放入委托中
SayHandler sayHandler=new SayHandler(Say);
//也可以写成
SayHandler sayHandler=Say;
//调用
sayHandler.Invoke("zhangsan");
//Invoke可以省略
sayHandler("zhangsan");
//添加多个方法
sayHandler+=SayHello;
sayHandler+=SayBye;
//移除方法
sayHandler-=SayBye;
//为委托赋值,赋值后委托内只存在此方法
//执行后,如果委托中有多个方法,并有返回值,只得到最后一个方法的返回值
sayHandler=SayBye;
sayHandler.Invoke("zhangsan");
C#内置委托
Func有参有返回值的泛型委托,最后一个参数为返回值类型
//两个参数,分别为int string类型,返回值为string类型
Func<int, string, string> handler
Action无返回值类型
//无参无返回值委托
Action handler
//泛型Action,有参无返回值委托
Action <int,string> handler
事件
事件是委托的一种特殊实例,事件不允许用户进行赋值操作
//使用关键字event声明事件
public event SayHandler handler;
事件不允许用户进行“=”操作,可以使用“+=” “-=”将方法放入事件中。