什么是委托?总结.net中重要的特性委托
什么是委托
可以用两点概括:
1,最通俗的理解是,一个安全的'函数指针'。
2,本质上,委托是一个类(class)(可以通过IL证明如下图),并且委托包含的是具有相同方法签名相同返回值的多个方法。
委托的类图:
从上图我们可以得到几点信息,1,委托是一个类(class)。2,委托继承自System.MulticastDelegate类型。
为什么要使用委托
更通俗的说法是,使用委托能够带来什么好处。
下面通过一个小的例子来演示一下使用委托的好处。需求是,通过输入的name,控制台分别打印中文和英文的问候语。
不使用委托:
1 namespace DelegateDemo 2 {
3 class PRogram 4 {
5 static void Main(string[] args) 6 {
7 //通过输入的name,控制台分别打印中文和英文的问候语 8 Hello("麦子", Language.Chinese);
9 Hello("mcgrady", Language.English);
10 11 Console.ReadKey();
12 }
13 14 /// summary>
15 /// 问候16 /// /summary>
17 /// param name="name">
/param>
18 /// param name="lang">
/param>
19 private static void Hello(string name, Language lang)20 {
21 if (lang == Language.Chinese)22 {
23 ChineseHello(name);
24 }
25 if (lang == Language.English)26 {
27 EnglishHello(name);
28 }
29 }
30 31 /// summary>
32 /// 中文问候33 /// /summary>
34 /// param name="name">
/param>
35 private static void ChineseHello(string name)36 {
37 Console.WrITeLine(string.Format("你好,{
0}
", name));
38 }
39 40 /// summary>
41 /// 英文问候42 /// /summary>
43 /// param name="name">
/param>
44 private static void EnglishHello(string name)45 {
46 Console.WriteLine(string.Format("hello,{
0}
", name));
47 }
48 49 }
50 51 /// summary>
52 /// 语言类型53 /// /summary>
54 public enum Language55 {
56 English,57 Chinese58 }
59 }
不使用委托的时候,需要使用一个枚举Language来表示使用中文问候还是英文问候,并且还要进行if...else...的判断。
当可以直接传递方法的时候也许就简单多了,下面来看一下。
使用委托:
1 namespace DelegateDemo 2 {
3 //声明委托 4 delegate void MyDel(string name);
5 6 class Program 7 {
8 static void Main(string[] args) 9 {
10 //通过输入的name,控制台分别打印中文和英文的问候语11 Hello("麦子", ChineseHello);
12 Hello("mcgrady", EnglishHello);
13 14 Console.ReadKey();
15 }
16 17 /// summary>
18 /// 问候19 /// /summary>
20 /// param name="name">
/param>
21 /// param name="myDel">
/param>
22 private static void Hello(string name, MyDel myDel)23 {
24 myDel(name);
25 }
26 27 /// summary>
28 /// 中文问候29 /// /summary>
30 /// param name="name">
/param>
31 private static void ChineseHello(string name)32 {
33 Console.WriteLine(string.Format("你好,{
0}
", name));
34 }
35 36 /// summary>
37 /// 英文问候38 /// /summary>
39 /// param name="name">
/param>
40 private static void EnglishHello(string name)41 {
42 Console.WriteLine(string.Format("hello,{
0}
", name));
43 }
44 45 }
46 }
所以总结起来,委托带来的好处主要有以下几点:
1,省去了大量的 if...else...或switch... 的判断,使得程序更面向对象了。
2,解耦,程序更容易扩展。例子:Tracy.Proxy接口代理组件,记录XMl日志和性能日志。
当然,这只是一个例子,目的是说明使用委托带来的好处,其实还有很多地方都使用到了委托,比如winform和webform的按钮click事件,Linq中的Func和Action委托等。
委托的应用场景
1,winform和webform的按钮click事件。
2,Linq中的Func和Action委托。
3,Tracy.Proxy接口代理组件
用XMind来总结一下:
以上就是什么是委托?总结.net中重要的特性委托的详细内容,更多请关注其它相关文章!
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 什么是委托?总结.net中重要的特性委托
本文地址: https://pptw.com/jishu/592442.html
