1定义和使用委托
1
class program
2
{
3
//1定义委托
4
delegate Person CreatePersonHandle(string FirstName, string LastName, int Age);
5
delegate void ShowEmployeeHandle(Employee emp);
6
7
static void Main(string[] args)
8
{
9
//3委托的使用
10
CreatePersonHandle eh = CreateEmployee;
11
Employee emee = (Employee)eh("Pony", "Smith", 41);//委托调用
12
13
ShowEmployeeHandle seh = ShowPerson;
14
seh(emee);
15
16
}
17
//2定义要被委托的处理方法,声明与委托一致
18
static Employee CreateEmployee(string FirstName, string LastName, int Age)
19
{
20
return new Employee(FirstName, LastName, Age);
21
}
22
static void ShowPerson(Person p)
23
{
24
Console.WriteLine("姓名:{0} {1} 年龄:{2}", p.firstName, p.lastName, p.age);
25
}
26
27
class Person
28
{
29
public string firstName;
30
public string lastName;
31
public int age;
32
public Person(string a, string b, int c)
33
{
34
firstName = a;
35
lastName = b;
36
age = c;
37
}
38
}
39
class Employee : Person
40
{
41
public Employee(string a, string b, int c)
42
: base(a, b, c)
43
{
44
}
45
}
46
47
}
class program2
{3
//1定义委托4
delegate Person CreatePersonHandle(string FirstName, string LastName, int Age);5
delegate void ShowEmployeeHandle(Employee emp);6

7
static void Main(string[] args)8
{9
//3委托的使用10
CreatePersonHandle eh = CreateEmployee;11
Employee emee = (Employee)eh("Pony", "Smith", 41);//委托调用12

13
ShowEmployeeHandle seh = ShowPerson;14
seh(emee);15

16
}17
//2定义要被委托的处理方法,声明与委托一致18
static Employee CreateEmployee(string FirstName, string LastName, int Age)19
{20
return new Employee(FirstName, LastName, Age);21
}22
static void ShowPerson(Person p)23
{24
Console.WriteLine("姓名:{0} {1} 年龄:{2}", p.firstName, p.lastName, p.age);25
}26

27
class Person28
{29
public string firstName;30
public string lastName;31
public int age;32
public Person(string a, string b, int c)33
{34
firstName = a;35
lastName = b;36
age = c;37
}38
}39
class Employee : Person40
{41
public Employee(string a, string b, int c)42
: base(a, b, c)43
{44
}45
}46

47
}
2使用委托和事件
1
class program
2
{
3
4
static void Main(string[] args)
5
{
6
//4使用委托和事件
7
Point point = new Point();
8
point.Create += new Point.OnCreate(pnt_Create);
9
//5此时调用了Point的Create事件时自动调用我们自定义的pnt_Create
10
}
11
//3定义要添加的事件处理
12
static void pnt_Create(Object sender, EventArgs e)
13
{
14
Console.WriteLine("OK");
15
}
16
17
class Point
18
{
19
//使用委托和事件
20
//1首先先定义委托
21
public delegate void OnCreate(Object Sender, EventArgs e);
22
//2创建事件
23
private static event OnCreate _Create;
24
public event OnCreate Create
25
{
26
add { _Create += value; }
27
remove { _Create -= value; }
28
}
29
}
30
}
class program2
{3

4
static void Main(string[] args)5
{6
//4使用委托和事件7
Point point = new Point();8
point.Create += new Point.OnCreate(pnt_Create);9
//5此时调用了Point的Create事件时自动调用我们自定义的pnt_Create10
}11
//3定义要添加的事件处理12
static void pnt_Create(Object sender, EventArgs e)13
{14
Console.WriteLine("OK");15
}16

17
class Point18
{19
//使用委托和事件20
//1首先先定义委托21
public delegate void OnCreate(Object Sender, EventArgs e);22
//2创建事件23
private static event OnCreate _Create;24
public event OnCreate Create25
{26
add { _Create += value; }27
remove { _Create -= value; }28
}29
}30
}
3类内部实现事件处理
1
class program
2

1
class program2

class Program2
{3
//类中实现事件处理4
static void Main(String[] args)5
{6
Retail myRetail = new Retail();7
Goods a = new Goods("鼠标", 12.5, 3);8
Goods b = new Goods("机箱", 100, 1);9
Goods c = new Goods("键盘", 60, 1);10
myRetail.AddGoods(a);11
myRetail.AddGoods(b);12
myRetail.AddGoods(c);13
myRetail.GoodsPay = 200;14
Console.WriteLine("共{0}件 合计{1:c}元 支付{2:c}元 找零 {3:c}元", myRetail.GoodsQuantity, myRetail.GoodsPay, myRetail.GoodsMoney, myRetail.Change);15
Console.ReadLine();16
}17
}18

19
class Retail20
{21
private ArrayList GoodsList;22
private delegate void AddHandle(Goods e);23
private delegate void PayHandle(double e);24
private event AddHandle WhenADD;25
private event PayHandle WhenPay;26
public int GoodsQuantity;27
public double GoodsMoney;//商品金额28
public double Change;//找零29
private double _GoodsPay;30
public double GoodsPay//付款信息31
{32
get { return _GoodsPay; }33
set34
{35
_GoodsPay = value;36
WhenPay(_GoodsPay);//计算金额37
}38
}39

40
public Retail()41
{42
GoodsList = new ArrayList();43
WhenPay = new PayHandle(OnPay);44
WhenADD = new AddHandle(OnADD);45
}46

47
public void AddGoods(Goods AdditionGoods)48
{49
GoodsList.Add(AdditionGoods);50
WhenADD(AdditionGoods);51
}52

53
private void OnADD(Goods e)54
{55
GoodsMoney += e.Price * e.Quantity;56
GoodsQuantity += e.Quantity;57
Console.WriteLine("商品名:{0,-10} | 价格: {1,8:f2} | 数量:{2}", e.GoodsName, e.Price, e.Quantity);58
Console.WriteLine("-".PadLeft(50, '-'));59
}60
private void OnPay(double e)61
{62
_GoodsPay = e;63
Change = _GoodsPay - GoodsMoney;64
}65
}66

67
struct Goods//商品结构68
{69
public string GoodsName;70
public double Price;71
public int Quantity;72
public Goods(string goodsname, double price, int quantity)73
{74
GoodsName = goodsname;75
Price = price;76
Quantity = quantity;77
}78
}