using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
/// <summary>
/// 小张委托小王买车票,又让买电影票
/// </summary>
namespace 委托
{
class XiaoWang
{
public static void BuyTicket()
{
Console.WriteLine("帮小张买票");
}
public static void BuyMovieTicket()
{
Console.WriteLine("又帮小张买电影票");
}
}
class XiaoZhang
{
//定义委托类型
public delegate void BuyTicketEventHandler();
static void Main(string[] args)
{
//声明委托实例---方法一
//BuyTicketEventHandler buyTicketEventHandler = new BuyTicketEventHandler(XiaoWang.BuyTicket);
//声明委托实例---方法二
BuyTicketEventHandler buyTicketEventHandler;
//调用委托,委托实例指向一个要执行的方法
buyTicketEventHandler = XiaoWang.BuyTicket;
//一个委托可以指向多个要执行的方法,不过有先后执行顺序
buyTicketEventHandler += XiaoWang.BuyMovieTicket; //在买完车票之后再买电影票
//执行
buyTicketEventHandler();
//------------------------上面是一个委托,下面又是一个委托-----------------------//
NameEventHandler englishName,chineseName; //声明委托实例
englishName = EnglishName; //调用委托,委托实例指向一个要执行的方法
//chineseName = ChineseName; //方法一:可以单独把一个要执行的方法指向委托实例
englishName += ChineseName; //方法二:可以在一个委托实例中添加多个要执行的方法
//englishName -= ChineseName; //取消对方法的绑定
englishName("xiaowang"); //执行时,先执行EnglishName方法,再执行ChineseName方法。
//chineseName("小王"); //可以这样使用
Console.ReadKey();
}
public delegate void NameEventHandler(String name); //定义委托
public static void EnglishName(String name) //定义委托有形参时,这里的形参要和定义的委托形参一致。
{
Console.WriteLine("EnglishName:"+ name);
}
public static void ChineseName(String name)
{
Console.WriteLine("中国名:"+ name);
}
}
}