在说事件之前得先了解委托。
委托,外表看来和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. 构建第一个SpringBoot工程

    学习和使用 SpringBoot 有一段时间了,现在开始陆陆续续会总结归纳 SpringBoot 学习中遇到的相关知识点. SpringBoot 设计目的是用来简化新Spring应用的初始搭建以及开发 ...

  2. windows 服务器远程桌面 你的凭据不工作

    一.问题描述   通过windows 远程桌面连接服务器时,输入正确的用户名和密码,点击连接按钮时,提示“你的凭据不工作”,但是其他个别电脑可以通过远程桌面远程到目标服务器.问题描述如下图所示: 二. ...

  3. Android Activity切换与Activity间数据交互

    在Android程序内部, startActivity借助Intent来启动一个子Activity(使用父子关系进行表述,只为表达清晰,Android中并未有父子Activity的概念).如下: In ...

  4. SQLSERVER 分区表实战

    背景:对NEWISS数据库创建分区表T_SALES的SQL.按照日期来进行分区步骤:1:创建文件组2:创建数据文件3:创建分区函数4:创建分区方案5:创建表及聚集索引6:导入测试数据(此处略),并查询 ...

  5. MySQL案例08:MySQL Scheduler Events带来的风险

    定时任务是我们开发.运维人员经常用到的,比如cron,job,schedule,events scheduler等都是为了方便我们重复执行某项工作而无需人工参与而设计,这里我要说的是MySQL数据库本 ...

  6. pycharm的放大和缩小字体的显示 和ubunt的截圖工具使用 ubuntu上安装qq微信等工具

    https://www.cnblogs.com/sui776265233/p/9322074.html#_label0 ubuntu: 截圖工具的使用 在ubuntu 10.04 的时候,还可以很方便 ...

  7. Online, Cheap -- and Elite

    Online, Cheap -- and Elite Analysis of Georgia Tech’s MOOC-inspired online master's in computer scie ...

  8. .NET Core 使用 EF 出错的解决方法

    在.NET Core 项目钟(类库),使用Entity Framework,建立模型生成数据库时,失败 Could not load assembly 'xxx'. Ensure it is refe ...

  9. mysql host'XXX' is not allowed to connect to this mysql server

    错误的原因一般是没有添加 IP可远程的权限. 首先以 root 帐户登陆 MySQL 1.在 Windows 主机中点击开始菜单,运行,输入“cmd”,进入控制台,然后cd 进入MySQL 的 bin ...

  10. January 01st, 2018 Week 01st Monday

    Life's like a movie, write your own. Keep believing, keep pretending. 人生如同电影,书写自己的结局.持续相信,继续演出. Some ...