在说事件之前得先了解委托。
委托,外表看来和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. 《图解HTTP》

    第一章.了解web及网络基础 1.2 http的诞生 HTTP于1990年问世,那时候HTTP并没有作为正式的标准被建立,被称为HTTP/0.9 HTTP正式作为标准被公布是在1996年5月,版本被命 ...

  2. smarty详细使用教程(韩顺平smarty模板技术笔记)

    MVC是一种开发模式,强调数据的输入.处理.显示是强制分离的 Smarty使用教程1.如何配置我们的smarty解压后把libs文件夹放在网站第一级目录下,然后创建两个文件夹templates 存放模 ...

  3. PXE 和 计算机网络启动

    1. 什么是PXE PXE(Pre-boot Execution Environment,预启动执行环境)是由Intel公司开发的最新技术,工作于Client/Server的网络模式,支持工作站通过网 ...

  4. 【Amazon 必考】Amazon Leadership Principles 亚马逊领导力准则

    Leadership Principles,也就是领导力准则,不仅仅是几条用来鼓舞人心的口号,更是成就了Amazon特有公司文化的秘诀.不管是为新项目讨论创意.寻找解决客户问题的方案,还是面试求职者时 ...

  5. WPScan扫描Wordpress漏洞

    一.什么是Wpscan?什么是Wordpres? 1.Wpscan WPScan是一个扫描WordPress漏洞的黑盒子扫描器,可以扫描出wordpress的版本,主题,插件,后台用户以及爆破后台用户 ...

  6. pt-table-checksum工具MySQL主从复制数据一致性

    所使用的工具是pt-table-checksum 原理是: 在主上执行检查语句去检查 mysql主从复制的一致性,生成 replace 语句,然后通过复制传递到从库,再通过update 更新 mast ...

  7. Javaweb学习(三):Servlet程序

    好了,既然开发环境已经配置好了.那么我们首先要搞定得便是servlet了,至于为什么不先去研究jsp,这是因为jsp与servlet本就是一体两面,jsp其本身经过编译.载入.转化等步骤最终会成为se ...

  8. node.js 笔记一

    现在地址:http://nodejs.org/download/ 我的机器是windows的,选择的文件是,是编译后的版本:Windows Installer (.msi)  32-bit examp ...

  9. 小程序push数组,渲染不出来解决办法

    1.在data中,定义一个空数组: zhou_time:[] 2.声明: var zhou_time = this.data.zhou_time; 3.PUSH赋值: zhou_time.push({ ...

  10. CGJ02、BD09、西安80、北京54、CGCS2000常用坐标系详解

    一.万能地图下载器中的常用坐标系 水经注万能地图下载器中的常用的坐标系主要包括WGS84经纬度投影.WGS84 Web 墨卡托投影.WGS84 UTM 投影.北京54高斯投影.西安80高斯投影.CGC ...