首页后端开发ASP.NET什么是委托?总结.net中重要的特性委托

什么是委托?总结.net中重要的特性委托

时间2024-01-30 11:10:02发布访客分类ASP.NET浏览480
导读:收集整理的这篇文章主要介绍了什么是委托?总结.net中重要的特性委托,觉得挺不错的,现在分享给大家,也给大家做个参考。 委托是.net中非常重要的特性,自.net 1.x版本就包含了,委托在项目开发过程中应用得非常多,但是一直以来很多同学...
收集整理的这篇文章主要介绍了什么是委托?总结.net中重要的特性委托,觉得挺不错的,现在分享给大家,也给大家做个参考。  委托是.net中非常重要的特性,自.net 1.x版本就包含了,委托在项目开发过程中应用得非常多,但是一直以来很多同学对其理解得不是非常清楚(也包括我,虽然做开发很多年了,可能很多地方不知不觉也使用到了委托,但是仍然不是很清楚),那么我会整理一个系列文章来总结和加深一下对委托的印象。

什么是委托

可以用两点概括:

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
ADO.NET实用实例介绍 javascript怎么将字符串转换为大写

游客 回复需填写必要信息