码迷,mamicode.com
首页 > 其他好文 > 详细

委托复习

时间:2014-06-18 22:04:02      阅读:118      评论:0      收藏:0      [点我收藏+]

标签:style   class   blog   code   tar   ext   

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 
 7 namespace 委托复习
 8 {
 9     class Program
10     {
11         static void Main(string[] args)
12         {
13             //委托相当于一个指向函数的变量
14             //指向函数的类型由委托的类型决定------委托是一个类型
15             //MyDelegate s = M1;
16             //Console.WriteLine(s());//输出 1
17 
18             //委托组合易犯的错误
19             //委托组合后,返回值为最后一个的值,前面被冲掉
20             MyDelegate s = new MyDelegate(M1) + M2;
21             Console.WriteLine(s());//输出 2
22 
23             //错误相当于 int i=i+3;----此时i无值,等号右边不能是未知数
24             //string s1+=s();
25 
26             Console.ReadKey();
27         }
28         public static string M1()
29         {
30             return "1";
31         }
32         public static string M2()
33         {
34             return "2";
35         }
36         delegate string MyDelegate();
37     }
38 }

委托实现事件:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Text;
 4 using System.Runtime.InteropServices;
 5 namespace MyDelegate
 6 {
 7     #region 委托实现事件
 8     //定义委托处理程序
 9     public delegate void PlayGameHandler(object sender, System.EventArgs e);
10     //员工,可能玩游戏的人
11     public class 员工
12     {
13         //先定义一个事件,这个事件表示“员工”在玩游戏
14         public event PlayGameHandler PlayGame;
15         //员工的称呼
16         private string m_Name;
17         //员工的工资
18         private int m_Money;
19         //构造函数
20         public 员工(string name)
21         {
22             Console.WriteLine("生成员工 " + name + "...");
23             m_Name = name;
24             m_Money = 1000;
25         }
26         //此属性得到员工的称呼
27         public string 称呼
28         { get { return m_Name; } }
29         //此属性可操作员工的工资
30         public int31         {
32             get { return m_Money; }
33             set { m_Money = value; }
34         }
35         //引发事件的“玩游戏”方法。为了引发PlayGame这个事件,必须指定此方法来引发它,其中包括 OnPlayGame(e)
36         public void 玩游戏()
37         {
38             Console.WriteLine(m_Name + "开始玩游戏了...");
39             Console.WriteLine(m_Name + ":CS好玩,哈哈哈!我玩...");
40             System.Threading.Thread.Sleep(500);
41             System.EventArgs e = new EventArgs();
42             OnPlayGame(e);
43         }
44         //实现OnPlayGame(e)
45         //protected virtual void OnPlayGame(System.EventArgs e)
46         protected void OnPlayGame(System.EventArgs e)
47         {
48             if (PlayGame != null)
49                 PlayGame(this, e);
50         }
51     }
52     //负责扣钱的人
53     public class 老板
54     {
55         //构造函数
56         public 老板()
57         {
58             Console.WriteLine("生成老板...");
59         }
60         public void 扣钱(object sender, EventArgs e)
61         {
62             Console.WriteLine("老板:好小子,上班时间胆敢玩游戏...");
63             Console.WriteLine("老板:看看你小子有多少钱...");
64             员工 f = (员工)sender;    /*这个代码表示让老板扣员工的钱,那么,老板扣钱的时候,必须要操作员工的对象实例。
65               参数object sender对象表示激发事件的对象,在这个程序里面就表示这个sender其实是员工*/
66             Console.WriteLine(f.称呼 + "的钱:" + f.钱.ToString());
67             Console.WriteLine("开始扣钱...");
68             System.Threading.Thread.Sleep(500);
69             f.钱 = f.钱 - 500;
70             Console.WriteLine("扣完了...现在" + f.称呼 + "还剩下:" + f.钱.ToString());
71         }
72     }
73     class Program
74     {
75         static void Main(string[] args)
76         {
77             Console.WriteLine("剧情开始了...");
78             老板 boss = new 老板(); //老板
79             员工 employee = new 员工("小张");   //员工小张
80             //指定监视,即设定发现小张玩游戏后采取的行动——扣钱
81             employee.PlayGame += new PlayGameHandler(boss.扣钱);
82             //小张开始玩游戏,浑然不知老板就在身后
83             employee.玩游戏();
84             //结果钱被扣掉,歇菜
85             Console.WriteLine("剧情结束...");
86             Console.ReadLine();
87         }
88     }
89     
90     #endregion
91 }

 

 

委托复习,布布扣,bubuko.com

委托复习

标签:style   class   blog   code   tar   ext   

原文地址:http://www.cnblogs.com/skyl/p/3790236.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!