首页 > 代码库 > 委托复习
委托复习
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 Program10 {11 static void Main(string[] args)12 {13 //委托相当于一个指向函数的变量14 //指向函数的类型由委托的类型决定------委托是一个类型15 //MyDelegate s = M1;16 //Console.WriteLine(s());//输出 117 18 //委托组合易犯的错误19 //委托组合后,返回值为最后一个的值,前面被冲掉20 MyDelegate s = new MyDelegate(M1) + M2;21 Console.WriteLine(s());//输出 222 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 int 钱31 {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 Program74 {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 #endregion91 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。