在说事件之前得先了解委托。
委托,外表看来和C/C++中函数指针没什么区别,但是本质上你才发现他其实就是个类!也就是说理解委托得从
这个两个方面去理解(单从一个方面去理解感觉就怪怪的呵呵!)

理解委托:
什么是委托?委托是c#中类型安全的,可以订阅一个或多个具有相同签名方法的函数指针。
声明一个委托,相当于声明了一个是函数指针类型,委托是一种类型,进一步说,他就是一个类!
他的目的就是,将方法可以作为其他方法的参数传递!进一步说,就是一个方法内部需要调用另一种方法
(及方法内部还有一个方法),且这个内部调用的方法存在多样性。那么最好的方法就是将内部的方法作为外
部的方法的参数数进行传参~~

委托的形式:
    声明委托的方式:delegate 返回值类型 委托类型名(参数)
比如delegate void deleProcess(string s);
注意这里的除了前面的delegate,剩下部分和声明一个函数一样,但是deleProcess不是函数名,而是委托类型名!

委托的使用:
      委托是c#中,可以订阅一个或多个具有相同签名方法的函数指针。所以说委托的使用和函数指针的使用是差不多的。
把它想象成一个指针就知道怎么用了~~但是委托又不能完全的看成一个函数指针(本质上是个类),这是因为委托考虑到更多的安全性,
它需要存储特定方法的细节。所以,定义好委托后,还需要创建一个委托实例,才可以使用(以存储特定方法的细节)!
假设有一个函数是:void SayHi(String s); 这个正好和delegate void deleProcess(string s);这个委托的签名一致。
那么我们开始使用委托:
deleProcess pro = new deleProcess(SayHi);//实例化一个委托,并且用SayHi方法初始化它。
deleProcess pro = SayHi;  //这是上面的简写形式,编译器帮我们进行了new!看上去是直接与方法关联(看起来有指针的感觉呵呵),其实还是通过委托!
注意SayHi以及pro都没有带“括号”的这是应为如果带上括号就是方法的调用了。好了当委托指向方法成功之后。
pro(s)就和SayHi(s),达到同一个目的了。
最终的目的委托是为了方法作为方法的参数:
viod GreetPeople(string name, deleProcess pro)//这个GreetPeople方法,就利用了委托将方法作为参数了!
{
      pro(name);//pro用起来就和方法是一样的~~
}
如此就可以把SayHi方法作为参数传递了:
GreetPeople(song,SayHi);
//摘抄自《C#高级编程》
委托的一个特征是它们的类型是安全的,可以确保被调用的方法签名是正确的。
但有趣的是,它们不关心调用该方法的是什么类型的对象,甚至不考虑该方法
是静态方法,还是实例方法。
提示:
给定委托的实例可以表示任何类型的任何对象上的实例方法或静态方法——只要方法
的签名匹配于委托的签名即可。
//-------------------------------------------------------------------------------------------------------------
//委托使用的例子~~
delegate string ProcessDelegate(string s);
static void ProcessIntArray(ProcessDelegate p)
        {
            string[] values = new string[] { "aB","Cd"};
            for (int i = 0; i < values.Length; i++)
            {
                values[i] = p(values[i]);
            }
            Console.WriteLine("处理后");
            foreach (string s in values)
            {
                Console.WriteLine(s);
            }
        }
编写函数,大写、小写、加引号
进一步体会:和直接调用函数的区别:用委托就可以指向任意的函数,哪怕是之前没定义的都可以,而不使用受限于那几种。

总结:C# 委托的全面理解的更多相关文章

  1. C#委托零基础理解

    C#委托零基础理解(转) 1,  为什么使用委托  2.什么是委托  3.委托如何使用 为什么使用委托? 委托是c#中非常重要的一个概念,使用委托使程序员可以将方法引用封装在委托对象内.然后可以将该委 ...

  2. C#委托之个人理解

    C#委托之个人理解   什么是委托 首先要知道什么是委托,用最通俗易懂的话来讲,你就可以把委托看成是用来执行方法(函数)的一个东西. 如何使用委托 在使用委托的时候,你可以像对待一个类一样对待它.即先 ...

  3. winform总结2> Action<> ,Action,func<>,委托相关的理解

    1,他们是什么: Action 封装一个方法,该方法不具有参数并且不返回值. Action<> 封装一个方法,该方法具有最多16个参数并且不返回值. func<> 封装一个具有 ...

  4. C#对委托的初步理解理解

    作为新手对委托的学习: 1.定义委托:委托实际上是一个类,在定义委托前就知道了方法的返回类型和方法的参数类型(可以把委托理解为只知道方法的返回类型和方法的参数类型,不知道方法体) public  de ...

  5. C#基础:对委托的简单理解

    在编程过程中,我们习惯把数据作为参数传递给方法(例:int a=int.Parse(“20”);).是否能将一个方法传递给另一个方法呢?是不是听起来有点奇怪!!! 线程大家应该熟悉吧,在计算机中并行运 ...

  6. C#委托,事件理解入门 (译稿)

    原文地址:http://www.codeproject.com/Articles/4773/Events-and-Delegates-Simplified 引用翻译地址:http://www.cnbl ...

  7. 深入理解C# 委托(delegate)-戈多编程

    今天来谈谈委托,深入理解委托,本文来自各大神经验总结. 1.委托是什么? 委托类型的声明与方法签名相似. 它有一个返回值和任意数目任意类型的参数,是一种可用于封装命名方法或匿名方法的引用类型. 委托类 ...

  8. C#委托的最简单入门和理解

      委托是.net语言中非常重要的一个概念,初学不太好理解也没有关系的,在一次一次的攻关后会领会到委托的精妙,可以说 .net 没有委托就没有后面更高级的事件,异步多线程等等特性的形成可能.所以一定要 ...

  9. .NET基础拾遗(4)委托、事件、反射与特性

    Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理基础 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开 ...

随机推荐

  1. Google Play内购测试

    Google Play内购测试 最近项目做海外版本,接入Google wallet支付后,测试验证比较繁琐,故记录一下. Google wallet支付方式接入完成后,需要按照如下步骤设置,才可以进行 ...

  2. [转载]Buffer cache的调整与优化

    Buffer Cache是SGA的重要组成部分,主要用于缓存数据块,其大小也直接影响系统的性能.当Buffer Cache过小的时候,将会造成更多的free buffer waits事件.下面将具体描 ...

  3. javascript中注册和移除事件的4种方式

    对于html中的一些元素注册事件的方式有多种 第一种: 复制代码代码如下: <script> function test() { alert("OK"); } < ...

  4. NIO 学习笔记

    0. 介绍 参考   关于Java IO与NIO知识都在这里   ,在其基础上进行修改与补充. 1. NIO介绍 1.1 NIO 是什么 Java NIO 是 java 1.4, 之后新出的一套IO接 ...

  5. 【mpu6050】学习笔记——基础知识点记录

    如图: 假设为三维空间有一个向量R 满足关系:  即为加速度计的x轴,y轴,z轴. 对于MPU6050 其求出的数值为:    分母为灵敏度, ADCRx为读出值. 我关心的是Axr,Ayr,Azr即 ...

  6. 使用SuperMap对接天地图

    我们在做项目时,经常需要与天地图对接,对接形式分为2种: 1. 将公网天地图用作项目底图,在JavaScript客户端加载显示: 2. 将自己发布的WMTS地图服务给别人用,同时需要自己的服务能和天地 ...

  7. 【Hibernate步步为营】--核心对象+持久对象全析(一)

    引言         上篇博客对Hibernate进行了基本的解析.并分析了它的一些特性. Hibernate可以如此的流行也是由于它有诸多长处,不论什么事物都有两面性.Hibernate尽管流行.可 ...

  8. PHP+Hadoop+Hive+Thrift+Mysql实现数据统计分析

    原址:http://www.cnblogs.com/wicub/p/6094045.html   安装 Hadoop安装: http://www.powerxing.com/install-hadoo ...

  9. 微信发红包 PHP 实现

    最近做生日营销,需要微信发红包,特此从网上找了一篇教程 首先你的有个服务号,并且开通了微信支付,我在这就不说怎么去申请和开通了,我是看了微信官方文档后,想看官方文档的朋友可以到下面这个链接 https ...

  10. Scala学习之路 (一)Scala的安装

    1.Scala下载 版本选择,看spark官网 http://spark.apache.org/docs/latest/ spark2.3.0版本是用2.11版本的Scala进行开发的,所以此处下载S ...