什么时候该用委托,为什么要用委托,委托有什么好处 信托投保服务需要委托人配偶签字吗为什么呢
好多人一直在问:什么时候该用委托,为什么要用委托,委托有什么好处…
看完下面的文章你将茅塞顿开…(看不懂的直接TDDTDS)
概念虽然我不喜欢讲太多
我们直接先来YY 个场景:
我很喜欢打游戏,但运气不好每次打游戏都会被主管看到,朱老板不喜欢他的员工在上班的时
间打游戏,所以朱老板就跟主管说:以后员工在打游戏,你就扣他20块钱.
这其实就是一个委托,朱老板委托主管一旦发现员工打游戏,就做一件事情.
程序该怎么写呢?
至少有2个类吧,主管与员工,主管有个方法扣钱,员工有个方法玩游戏,那么开始动工了
员工类:
public class Employee{ //员工的薪水 private int money; //该员工的主管 private Manager Manager; public Employee(Manager manager) { // 通过构造函数,初始化员工的主管与薪水。 Manager = manager; money = 8000; } public int Money { get { return money; } set { money = value; } } public void PlayGame() { Console.WriteLine("员工:开始玩游戏了.."); Console.ReadKey(); Console.WriteLine("员工:CS真好玩,哈哈哈! 我玩..."); Console.ReadKey(); Manager.RemoveMoney(this); }}主管类: public class Manager{ public Manager() { } //扣薪水 public void RemoveMoney(Employee employee) { Console.WriteLine ("主管:上班时间胆敢玩游戏"); Console.ReadKey(); Console.WriteLine("主管:看看你小子有多少薪水:" + employee.Money); Console.ReadKey(); Console.WriteLine("主管:我开始扣薪水..."); Console.ReadKey(); employee.Money -= 20; Console.WriteLine("主管:扣好了."); Console.ReadKey(); Console.WriteLine("主管:看看你小子薪水剩余:" + employee.Money); Console.ReadKey(); } }Mian方法大概这么写就行了: public static void Main(string[] args){// 生成主管类的对象实例 kingManager king = new Manager();// 生成员工类类的对象实例 windEmployee wind = new Employee(king);// 员工开始玩游戏wind.PlayGame();}运行,果然结果是对的,看来做为程序员我还是比较低调的…写出来结果很正常,也不沾沾自喜…
员工:开始玩游戏了… 员工:CS真好玩,哈哈哈! 我玩… 主管:上班时间胆敢玩游戏 主管:看看你小子有多少薪水:8000 主管:我开始扣薪水… 主管:扣好了. 主管:看看你小子薪水剩余:7980
下面我们简单的分析下这个程序:
1:在创建主管类之后才能创建员工类,耦合性太高,也就是说你要创建个员工,必须要先创建个主管…
2:如果场景发生以下变化,我要让经理代替主管,我们不得不修改员工类,并增加经理类.
这样看来这段程序设计的并不好,我们不妨来考虑下事件(特殊的委托)来实现
必须要定义一个委托,就是让主管监视员工,然后员工类里要有个事件(员工也是激发该事件的对象),主管执行事件
public delegate void Play(Object Sender, System.EventArgs e);public class Employee{ public int money = 2200;//懒得写属性了.. public event Play play; public Employee() { } public void PlayGame() { System.EventArgs e = new EventArgs(); OnPlayGame(this, e); }void OnPlayGame(object Sender, EventArgs e) { if (play != null) { play(Sender, e); } }}主管类就要实现一个方法,这个方法与委托的返回直一样,参数一样就行了,给委托来调用的.:public class Manager{ public Manager() { } public void RemoveMoney(Object Sender, System.EventArgs e) { Employee emp = Sender as Employee; emp.money -= 20; Console.WriteLine(emp.money); }}那么调用就变的简单了Manager xiaotao = new Manager();// 生成员工类的对象实例 shulinEmployee shulin = new Employee();// 设下委托,指定监视shulin.play += new Play(xiaotao.RemoveMoney);// 员工开始玩游戏,玩一次扣一次shulin.PlayGame();shulin.PlayGame();Console.ReadKey();输出:21802160总结:
当然,不使用委托和事件我们仍然可以设计出解耦的类,然而却会增加很多的类、接口以及关联等等,增加了代码量和程序的逻辑复杂性,而在.net里利用委托和事件我们只需少的多的代码来实现。
http://www.cnblogs.com/superpcer/archive/2011/06/06/2073751.html
版权声明: 本站仅提供信息存储空间服务,旨在传递更多信息,不拥有所有权,不承担相关法律责任,不代表本网赞同其观点和对其真实性负责。如因作品内容、版权和其它问题需要同本网联系的,请发送邮件至 举报,一经查实,本站将立刻删除。