
1.什么是委托?
委托在C#里的意义和在现实里差不多,从字面意思理解即可。举个例子:领导委托小张去传递个文件,这就是委托。
而在C#中同样是这样的道理。只是整个动作中有两个对象,施加委托者和委托承担者是两个对象而不是人而已。
委托的代码写法:
- public delegate void MessageManager();
2.举例说话
举个例子,某公司领导Manager有件关于代码处理的工作(Coding)需要委托个下属小张(MrZhang)去做。
a.下面看领导(Manager)和小张(MrZhang)的内部动作代码,下面是
- public delegate void MessageManager();
上面是施加委托者的方法代码。
b.下面看小张(MrZhang)的内部代码:
- public class MrZhang
- {
- public static void Coding()
- {
- MessageBox.Show("小张Coding已完成");
- }
- }
小张本身含有能完成Coding工作的能力。
c.下面看委托部分了,领导如何委托给小张。
- MessageManager Manager = new MessageManager(MrZhang.Coding);
- Manager();
MessageManager Manager = new MessageManager(MrZhang.Coding);
这是委托的具体动作,要做的动作是Coding,而这件事儿委托给MrZhang来做了。
1.委托的方法必须要加上,因为委托的构造函数是不为空的。
2.委托的参数和返回类型,都要和你要具体委托的方法要一致
然后开始执行Manager();
d.整体代码如下,读者可以复制到工程尝试下:
- public class MainWindow
- {
- delegate void MessageManager();
- public MainWindow()
- {
- InitializeComponent();
- MessageManager Manager = new MessageManager(MrZhang.Coding);
- Manager();
- }
- }
-
- public class MrZhang
- { public static void Coding()
- {
- MessageBox.Show("小张Coding已完成");
- }
- }
e.委托事件可以同时委托给多个对象,如下:
- public MainWindow()
- {
- InitializeComponent();
- MessageManager Manager = new MessageManager(MrZhang.Coding); //通过+=绑定委托
- Manager += new MessageManager(MrLiu.Coding);
- Manager(); //通过-=解绑
- Manager -= new MessageManager(MrLiu.Coding);
-
- }
评价