代码如下,我不太明白:
namespace Event3
{
class Program
{
static void Main(string[] args)
{
Customer customer = new Customer();
Waiter waiter = new Waiter();
customer.Order += waiter.Action;
customer.Action();
customer.PayBill();
Console.ReadLine();
}
}
public class OrderEventArgs:EventArgs
{
public string DishName { get; set; }
public string Size { get; set; }
}
public delegate void OrderEventHandler(Customer customer, OrderEventArgs e);
public class Customer
{
private OrderEventHandler orderEventHandler;
public event OrderEventHandler Order
{
add
{
this.orderEventHandler += value;
}
remove
{
this.orderEventHandler -= value;
}
}
public double Bill { get; set; }
public void PayBill()
{
Console.WriteLine("I will pay ${0}",this.Bill);
}
public void WalkIn()
{
Console.WriteLine("Walk into the restaurant.");
}
public void SitDown()
{
Console.WriteLine("Sit down.");
}
public void Think()
{
Console.WriteLine("Let me think...");
Thread.Sleep(1000);
if (this.orderEventHandler!=null)
{
OrderEventArgs e = new OrderEventArgs();
e.DishName = "Kongpao Chicken";
e.Size = "large";
this.orderEventHandler.Invoke(this,e);
}
}
public void Action()
{
this.WalkIn();
this.SitDown();
this.Think();
}
}
public class Waiter
{
public void Action(Customer customer, OrderEventArgs e)
{
Console.WriteLine("I will serve you dish-{0}",e.DishName);
double price = 10;
switch(e.Size)
{
case "small":
price = price * 0.5;
break;
case "large":
price = price * 1.5;
break;
default:
break;
}
customer.Bill += price;
}
}
}
1.this.orderEventHandler.Invoke(this,e)就是直接执行事件函数,这里没有触发什么事。
2.this就是当前类的实例呀,比如按钮点击事件,如果你有许多动态布置的按钮,功能类似,但是行号不同,那肯定是要给所有按钮挂载同一个回调函数,而不是每个按钮写个函数;当函数执行时,就需要获取事件函数里的参数sender,来判断到底是哪个按钮被点击了。
3.一个事件可以被注册多次,类似往list里面add元素一样,当事件函数调用时,会按顺序调用所有注册过的回调函数。+=就是增加一个挂载,-=就是不想事件继续执行了,去掉挂载