资料来源于刘铁猛的视频
1 完整申明
using System;
using System.Threading;
using System.Windows.Forms;
namespace EventExample
{
class Program
{
static void Main(string[] args)
{
Customer customer = new Customer();
Waitor waitor = new Waitor();
customer.Order += waitor.Action;
customer.Action();
customer.PayTheBill();
}
}
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 PayTheBill()
{
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()
{
for (int i = 0; i < 5; i++)
{
Console.WriteLine("Let me think......");
Thread.Sleep(1000);
}
if (this.orderEventHandler != null)
{
OrderEventArgs e = new OrderEventArgs();
e.DishName = "KongPao";
e.Size = "large";
this.orderEventHandler.Invoke(this, e);
}
}
public void Action()
{
Console.ReadLine();//程序需要等一会儿
this.WalkIn();
this.SitDown();
this.Think();
}
}
class Waitor
{
internal void Action(Customer customer, OrderEventArgs e)
{
Console.WriteLine("I will serve you the dish {0}", e.DishName);
double price = 10;
switch (e.Size)
{
case "small":
price *= 0.5;
break;
case "large":
price *= 2;
break;
default:
break;
}
//throw new NotImplementedException();
customer.Bill += price;
}
}
}
2 简化申明
using System;
using System.Threading;
using System.Windows.Forms;
namespace EventExample
{
class Program
{
static void Main(string[] args)
{
Customer customer = new Customer();
Waitor waitor = new Waitor();
customer.Order += waitor.Action;
customer.Action();
customer.PayTheBill();
}
}
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
{
//简化申明事件
public event OrderEventHandler Order;
//完整申明
//private OrderEventHandler orderEventHandler;
//public event OrderEventHandler Order
//{
// add
// {
// this.orderEventHandler += value;
// }
// remove
// {
// this.orderEventHandler -= value;
// }
//}
public double Bill { get; set; }
public void PayTheBill()
{
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()
{
for (int i = 0; i < 5; i++)
{
Console.WriteLine("Let me think......");
Thread.Sleep(1000);
}
if (this.Order != null)
{
OrderEventArgs e = new OrderEventArgs();
e.DishName = "KongPao";
e.Size = "large";
this.Order.Invoke(this, e);
}
}
public void Action()
{
Console.ReadLine();//程序需要等一会儿
this.WalkIn();
this.SitDown();
this.Think();
}
}
class Waitor
{
internal void Action(Customer customer, OrderEventArgs e)
{
Console.WriteLine("I will serve you the dish {0}", e.DishName);
double price = 10;
switch (e.Size)
{
case "small":
price *= 0.5;
break;
case "large":
price *= 2;
break;
default:
break;
}
//throw new NotImplementedException();
customer.Bill += price;
}
}
}
3 申明为委托字段时也可以运行
using System;
using System.Threading;
using System.Windows.Forms;
namespace EventExample
{
class Program
{
static void Main(string[] args)
{
Customer customer = new Customer();
Waitor waitor = new Waitor();
customer.Order += waitor.Action;
customer.Action();
customer.PayTheBill();
}
}
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
{
//申明一个委托字段
public OrderEventHandler Order; //
//完整申明
//private OrderEventHandler orderEventHandler;
//public event OrderEventHandler Order
//{
// add
// {
// this.orderEventHandler += value;
// }
// remove
// {
// this.orderEventHandler -= value;
// }
//}
public double Bill { get; set; }
public void PayTheBill()
{
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()
{
for (int i = 0; i < 5; i++)
{
Console.WriteLine("Let me think......");
Thread.Sleep(1000);
}
if (this.Order != null)
{
OrderEventArgs e = new OrderEventArgs();
e.DishName = "KongPao";
e.Size = "large";
this.Order.Invoke(this, e);
}
}
public void Action()
{
Console.ReadLine();//程序需要等一会儿
this.WalkIn();
this.SitDown();
this.Think();
}
}
class Waitor
{
internal void Action(Customer customer, OrderEventArgs e)
{
Console.WriteLine("I will serve you the dish {0}", e.DishName);
double price = 10;
switch (e.Size)
{
case "small":
price *= 0.5;
break;
case "large":
price *= 2;
break;
default:
break;
}
//throw new NotImplementedException();
customer.Bill += price;
}
}
}
4 但这样可能会出错,不是我们所希望的。
using System;
using System.Threading;
using System.Windows.Forms;
namespace EventExample
{
class Program
{
static void Main(string[] args)
{
Customer customer = new Customer();
Waitor waitor = new Waitor();
customer.Order += waitor.Action;
OrderEventArgs e = new OrderEventArgs();
e.DishName = "TuDouSi";
e.Size = "large";
OrderEventArgs e2 = new OrderEventArgs();
e2.DishName = "Beer";
e2.Size = "large";
//这样外面可以访问了
Customer badGuy = new Customer(); //badguy给别人点菜了
badGuy.Order += waitor.Action;
badGuy.Order.Invoke(customer, e);
badGuy.Order.Invoke(customer, e2);
customer.PayTheBill();
}
}
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
{
//申明一个委托字段
public OrderEventHandler Order; //
//完整申明
//private OrderEventHandler orderEventHandler;
//public event OrderEventHandler Order
//{
// add
// {
// this.orderEventHandler += value;
// }
// remove
// {
// this.orderEventHandler -= value;
// }
//}
public double Bill { get; set; }
public void PayTheBill()
{
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()
{
for (int i = 0; i < 5; i++)
{
Console.WriteLine("Let me think......");
Thread.Sleep(1000);
}
if (this.Order != null)
{
OrderEventArgs e = new OrderEventArgs();
e.DishName = "KongPao";
e.Size = "large";
this.Order.Invoke(this, e);
}
}
public void Action()
{
Console.ReadLine();//程序需要等一会儿
this.WalkIn();
this.SitDown();
this.Think();
}
}
class Waitor
{
internal void Action(Customer customer, OrderEventArgs e)
{
Console.WriteLine("I will serve you the dish {0}", e.DishName);
double price = 10;
switch (e.Size)
{
case "small":
price *= 0.5;
break;
case "large":
price *= 2;
break;
default:
break;
}
//throw new NotImplementedException();
customer.Bill += price;
}
}
}
不要用3,4
自带的EventHandler使用
using System;
using System.Threading;
using System.Windows.Forms;
namespace EventExample
{
class Program
{
static void Main(string[] args)
{
Customer customer = new Customer();
Waitor waitor = new Waitor();
customer.Order += waitor.Action;
customer.Action();
customer.PayTheBill();
}
}
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
{
public event EventHandler Order; //关键是event
public double Bill { get; set; }
public void PayTheBill()
{
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()
{
for (int i = 0; i < 5; i++)
{
Console.WriteLine("Let me think......");
Thread.Sleep(1000);
}
if (this.Order != null)
{
OrderEventArgs e = new OrderEventArgs();
e.DishName = "KongPao";
e.Size = "large";
this.Order.Invoke(this, e);
}
}
public void Action()
{
Console.ReadLine();//程序需要等一会儿
this.WalkIn();
this.SitDown();
this.Think();
}
}
class Waitor
{
internal void Action(object sender, EventArgs e)
{
Customer customer = sender as Customer;
OrderEventArgs orderInfo = e as OrderEventArgs;
Console.WriteLine("I will serve you the dish {0}", orderInfo.DishName);
double price = 10;
switch (orderInfo.Size)
{
case "small":
price *= 0.5;
break;
case "large":
price *= 2;
break;
default:
break;
}
//throw new NotImplementedException();
customer.Bill += price;
}
}
}
using System;
using System.Threading;
using System.Windows.Forms;
namespace EventExample
{
class Program
{
static void Main(string[] args)
{
Customer customer = new Customer();
Waitor waitor = new Waitor();
customer.Order += waitor.Action;
customer.Action();
customer.PayTheBill();
}
}
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
{
public event EventHandler Order; //
//完整申明
//private OrderEventHandler orderEventHandler;
//public event OrderEventHandler Order
//{
// add
// {
// this.orderEventHandler += value;
// }
// remove
// {
// this.orderEventHandler -= value;
// }
//}
public double Bill { get; set; }
public void PayTheBill()
{
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()
{
for (int i = 0; i < 5; i++)
{
Console.WriteLine("Let me think......");
Thread.Sleep(1000);
}
this.OnOrder("Tudousi", "large");
}
protected void OnOrder(string dishName, string size)
{
OrderEventArgs e = new OrderEventArgs();
e.DishName = dishName;
e.Size = size;
this.Order.Invoke(this, e);
}
public void Action()
{
// Console.ReadLine();//程序需要等一会儿
this.WalkIn();
this.SitDown();
this.Think();
}
}
class Waitor
{
internal void Action(object sender, EventArgs e)
{
Customer customer = sender as Customer;
OrderEventArgs orderInfo = e as OrderEventArgs;
Console.WriteLine("I will serve you the dish {0}", orderInfo.DishName);
double price = 10;
switch (orderInfo.Size)
{
case "small":
price *= 0.5;
break;
case "large":
price *= 2;
break;
default:
break;
}
//throw new NotImplementedException();
customer.Bill += price;
}
}
}
一个类对外的接口主要有三个:方法,属性,事件=== 做事件, 荐储数据,通知别人