C#中的方法(函数),委托和事件
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#中的方法(函数),委托和事件的更多相关文章
- 一文解读C# 动态拦截第三方进程中的方法函数(外挂必备)
一.前言 由于项目需要,最近研究了一下跨进程通讯改写第三方程序中的方法(运行中),把自己程序中的目标方法直接覆盖第三方程序中的方法函数:一直没有头绪,通过搜索引擎找了一大堆解决方案,资料甚是稀少,最后 ...
- 泛型 System.Collections.Generic及泛型继承、运算符、结构、接口、方法、委托、事件、可空类型等
一.定义泛型类 void Main() { //实例化泛型类时,才指定具体的类型 MyGenericClass<); Console.WriteLine(MyGeneri.InnerT1Obje ...
- php5 中魔术方法函数有哪几个
魔术函数:9.3 构造函数:__construct() 9.3.1 实例化对象时被调用. 9.3.2 在类中,构造函数是用来初始化对象的,利用构造函数,可以操作对象,并改变它的值. 9.3.3 当__ ...
- python中的嵌套类(内部类调用外部类中的方法函数)
在为书中版本是3.X的,但2.X不太支持直接调用. 所以,在PYTHON2.X中,要在内部类中调用外部类的方法,就必须得实例化外部类,然后,传入实例进行调用. 花了我两个小时啊,资料没找到,自己一个一 ...
- 详解C#泛型(二) 获取C#中方法的执行时间及其代码注入 详解C#泛型(一) 详解C#委托和事件(二) 详解C#特性和反射(四) 记一次.net core调用SOAP接口遇到的问题 C# WebRequest.Create 锚点“#”字符问题 根据内容来产生一个二维码
详解C#泛型(二) 一.自定义泛型方法(Generic Method),将类型参数用作参数列表或返回值的类型: void MyFunc<T>() //声明具有一个类型参数的泛型方法 { ...
- C#中在多个地方调用同一个触发器从而触发同一个自定义委托的事件
场景 在Winfom中可以在页面上多个按钮或者右键的点击事件中触发同一个自定义的委托事件. 实现 在位置一按钮点击事件中触发 string parentPath = System.IO.Directo ...
- C#委托和事件详解
委托Delegate delegate是C#中的一种类型,它实际上是一个能够持有对某个方法的引用的类.与其它的类不同,delegate类能够拥有一个签名(signature),并且它"只能持 ...
- NET中级课--浅谈委托,事件,异步调用,回调等概念
直接说题. 委托 首先明确它是什么,其实就是一个类,定义一个委托即定义一个类,那么它是什么类?用来说明方法的类型的类.字段有类型,那么方法其实也有类型,就是委托. 委托是某 ...
- C#委托与事件学习笔记
委托事件学习笔记 本文是学习委托和事件的笔记,水平有限,如有错漏之处,还望大神不吝赐教. 什么是委托?从字面意思来解释,就是把一个动作交给别人去执行.在实际开发中最常用的就是使一个方法可以当做一个参数 ...
随机推荐
- linux常见命令-查看磁盘空间
linux查看磁盘使用情况命令 1. 统一每个目录下磁盘的整体情况: df -h 2. 查看指定目录,在命令后直接放目录名,比如查看“usr”目录使用情况:df -h /usr/ 3. 查看当前目录 ...
- Android-FileUtils工具类
文件相关工具类 public final class FileUtils { private FileUtils() { throw new UnsupportedOperationException ...
- network_node:host解决Docker容器化部署微服务出现的Dobbo通信问题
在Docker中,有时候出现 ports: - 20880:20880 Dobbo通信出现问题. 此时应该改成 network_node:host 注释 ports!
- 简明的sql优化
网上关于SQL优化的教程很多,但是比较杂乱.近日有空整理了一下,写出来跟大家分享一下,其中有错误和不足的地方,还请大家纠正补充. 这篇文章我花费了大量的时间查找资料.修改.排版,希望大家阅读之后,感觉 ...
- Unity3d中使用Lua
对于手机游戏,如果可以在线更新以实现bug修复.新功能添加等等,其好处自不必多说. 通过C#的反射机制,也可以实现某种程度上的脚本级更新,具体可以参考 http://docs.unity3d.com/ ...
- Pi 在Windows下面使用远程桌面登录
1.删除系统自带的xrdp 输入命令sudo apt-get purge xrdp pi@raspberrypi:~ $ sudo apt-get purge xrdp 正在读取软件包列表... 完成 ...
- 「HAOI2010」 弹飞绵羊
题目链接 戳我 \(Solution\) \(LCT\)裸题 我们首先先新建一个节\(n+1\)点,表示被弹飞 对于点\(i,link(i,min(n+1,i+k_i))\) 再看看修改: 现在要将点 ...
- ansible 之条件语句 when
注册变量: 变量的另一个用途是将一条命令的运行结果保存到变量中,供后面的playbook使用.例如: - hosts: webservers tasks: - shell: /usr/bin/foo ...
- Syncthing源码解析 - 启动过程
我相信很多朋友会认为启动就是双击一下Syncthing程序图标,随后就启动完毕了!如果这样认为,对,也不对!对,是因为的确是这样操作,启动了Syncthing:不对是因为在调试Syncthing启动过 ...
- 【汉化】Acunetix Web Vulnerability Scanner 11.x汉化包
破解补丁::http://www.52pojie.cn/thread-609275-1-1.html 汉化界面截图: 登陆界面 仪表盘 目标 漏洞 扫描 用户配置 汉化详情: 1.对UI界面大部分 ...