1. 先有方法,然后再有委托,最后再有事件

2. 思考能不能将 A方法 作为参数,传递给 B方法呢?

eg: 在传统的编程方式中,A方法 调用 B方法的方式如下:

//洗菜
public void Washing(string vegetables){
Console.WriteLine("清洗"+ vegetables);
} //做家务
public void DoingHousework( ){
//洗菜..
Washing("土豆");//直接调用
}

能不能像vegetables作为Washing()的参数那样,来实现

DoingHousework()调用Washing()呢,那代码应该怎么写呢,

//洗菜 
public void Washing(string vegetables){
Console.WriteLine("清洗"+ vegetables);
} /*
能不能将Washing()作为参数,
传递给DoingHousework()呢
*/
//做家务
public void DoingHousework( ){//貌似以前没怎么听说过,可以将方法作为另一个方法的参数哦,那这个参数的类型应该是
//洗菜..
}

貌似以前没怎么听说过,可以将方法作为另一个方法的参数哦,那这个参数的类型应该是 没错就是委托

3. 委托 delegate(方法的类型):

类似于C/C++中的函数指针

委托的声明:

public delegate void HouseworkDelegate(string str);

注意:

delegate:是委托的关键字,由上面委托的声明可以看出,它除了多了delegate关键字,其他部分跟方法的声明完全一样

那么上面的例子使用委托后,应该改为:

//声明委托
public delegate void HouseworkDelegate(string str); //洗菜
public void Washing(string vegetables){
Console.WriteLine("清洗"+ vegetables);
} //DoingHousework()拥有一个HouseworkDelegate类型的参数
public void DoingHousework(HouseworkDelegate houseworkDelegate){
//洗菜
houseworkDelegate("西红柿");
}

更多委托相关的信息,可以查看另一篇博客:C#中的委托 Delegate(委托 也叫代表,代表一类方法)

4. 事件 event:

如果说 委托 是对方法的抽象(其实是方法的类型);那么事件 则是在委托的基础上 进行了一些特殊的处理,加工

所以 事件 本质还是委托。

4.1. 事件的声明:

public event HousewordDelegate housewordEvent;

注意:

event:是事件的关键字, event后面紧接的是 委托的类型 HousewordDelegate,

所以声明事件之前,必须先声明事件所要使用的Delegate,由声明更可以看出,事件就是加工过后的委托!!

借助Reflactor来对 event的声明语句做一探究,看看为什么会发生这样的错误:

public event GreetingDelegate MakeGreet;

5. 总结:

委托,事件,归根到底其实就是对方法的加工和特殊处理后的产物。

更多内容,请查看:http://www.tracefact.net/csharp-programming/delegates-and-events-in-csharp.aspx

C#中的方法(函数),委托和事件的更多相关文章

  1. 一文解读C# 动态拦截第三方进程中的方法函数(外挂必备)

    一.前言 由于项目需要,最近研究了一下跨进程通讯改写第三方程序中的方法(运行中),把自己程序中的目标方法直接覆盖第三方程序中的方法函数:一直没有头绪,通过搜索引擎找了一大堆解决方案,资料甚是稀少,最后 ...

  2. 泛型 System.Collections.Generic及泛型继承、运算符、结构、接口、方法、委托、事件、可空类型等

    一.定义泛型类 void Main() { //实例化泛型类时,才指定具体的类型 MyGenericClass<); Console.WriteLine(MyGeneri.InnerT1Obje ...

  3. php5 中魔术方法函数有哪几个

    魔术函数:9.3 构造函数:__construct() 9.3.1 实例化对象时被调用. 9.3.2 在类中,构造函数是用来初始化对象的,利用构造函数,可以操作对象,并改变它的值. 9.3.3 当__ ...

  4. python中的嵌套类(内部类调用外部类中的方法函数)

    在为书中版本是3.X的,但2.X不太支持直接调用. 所以,在PYTHON2.X中,要在内部类中调用外部类的方法,就必须得实例化外部类,然后,传入实例进行调用. 花了我两个小时啊,资料没找到,自己一个一 ...

  5. 详解C#泛型(二) 获取C#中方法的执行时间及其代码注入 详解C#泛型(一) 详解C#委托和事件(二) 详解C#特性和反射(四) 记一次.net core调用SOAP接口遇到的问题 C# WebRequest.Create 锚点“#”字符问题 根据内容来产生一个二维码

    详解C#泛型(二)   一.自定义泛型方法(Generic Method),将类型参数用作参数列表或返回值的类型: void MyFunc<T>() //声明具有一个类型参数的泛型方法 { ...

  6. C#中在多个地方调用同一个触发器从而触发同一个自定义委托的事件

    场景 在Winfom中可以在页面上多个按钮或者右键的点击事件中触发同一个自定义的委托事件. 实现 在位置一按钮点击事件中触发 string parentPath = System.IO.Directo ...

  7. C#委托和事件详解

    委托Delegate delegate是C#中的一种类型,它实际上是一个能够持有对某个方法的引用的类.与其它的类不同,delegate类能够拥有一个签名(signature),并且它"只能持 ...

  8. NET中级课--浅谈委托,事件,异步调用,回调等概念

    直接说题. 委托         首先明确它是什么,其实就是一个类,定义一个委托即定义一个类,那么它是什么类?用来说明方法的类型的类.字段有类型,那么方法其实也有类型,就是委托.       委托是某 ...

  9. C#委托与事件学习笔记

    委托事件学习笔记 本文是学习委托和事件的笔记,水平有限,如有错漏之处,还望大神不吝赐教. 什么是委托?从字面意思来解释,就是把一个动作交给别人去执行.在实际开发中最常用的就是使一个方法可以当做一个参数 ...

随机推荐

  1. 【分分钟内搭建一个带用户系统的博客程序(一)用户系统】asp.net core的Identity真香,EF真香!

    不用不知道,一用香到爆. 老哥是个屌丝前端,但也想写点web应用耍一耍.之前弄过了NodeJs,也弄过JAVA,最近由于写游戏的原因用C#,索性上手一波asp.net core. 这篇博客记录的是,如 ...

  2. C#计算两个日期之间相差的天数

    说明:如:1900-01-01与1900-01-01之间算一天 private static int DateDiff(DateTime dateStart, DateTime dateEnd) { ...

  3. django系列5.5--分组查询,聚合查询,F查询,Q查询,脚本中调用django环境

    一.聚合查询 aggregate(*args, **args) 先引入需要的包,再使用聚合查询 #计算所有图书的平均价格 from django.db.models import Avg Book.o ...

  4. crond脚本执行并发冲突问题

    在计划任务中,偶尔会看到重复执行的情况: 例如我们公司的计划任务举例: */ * * * * root cd /opt/xxxx/test_S1/html/xxxx/admin; php index. ...

  5. 黄包车比赛 python学习

    将性别进行编码: https://github.com/Bifzivkar/Boutique-Travel-Services-Predict/blob/master/feature/2_feature ...

  6. Servlet(汇聚页)

    Servlet(汇聚页) --------------------------------------------------------------------------------------- ...

  7. Linux下查找命令

    在CentOs下查找某个目录下的某个文件,使用如下指令: find /目录 -name 文件名 eg:查找当前目录下关于hadoop的文件 find / -name hadoop

  8. 根据某个key给二维数组分组

    /** * 根据某个key给二维数组分组 */ private function array_group_by($arr, $key) { $grouped = []; foreach ($arr a ...

  9. elasticsearch-5.1.1 安装的问题

    elasticsearch 5.1 安装过程中遇到了一些问题做一些记录. 问题一:警告提示 [2016-12-20T22:37:28,543][INFO ][o.e.b.BootstrapCheck ...

  10. php性能优化二(PHP配置php.ini)

    PHP优化对于PHP的优化主要是对php.ini中的相关主要参数进行合理调整和设置,以下我们就来看看php.ini中的一些对性能影响较大的参数应该如何设置. # vi /etc/PHP.ini (1) ...