博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
浅谈委托事件
阅读量:5279 次
发布时间:2019-06-14

本文共 1769 字,大约阅读时间需要 5 分钟。

委托: 具有相同的方法签名和返回值类型的方法列表
我的理解:委托就是一个可以存放方法(地址)的容器,方法存放在委托中是无序的,当我们在委托中存放多个方法时,
我们不能确定委托调用方法的顺序。委托是一种类型,与类同级别。
委托定义:关键字 delegate
访问修饰符 delegate 返回值类型 委托名(参数......)
委托赋值:
public delegate void FistDelegate(int num);
protected void DelegateMethod(int n){Console.WriteLine("num:"+n)} //与委托有相同签名和返回值类型的方法;
FistDelegate fd=new FistDelegate(DelegateMethod);
FistDelegate fd=DelegateMethod;
添加多个方法用+=, 移除方法用-=;
调用委托
在调用委托之前先要判断委托是否为空
if(fd!=null){fd(12)}

调用带返回值类型的委托

注意:如果委托有返回值,且有多个委托,那么就返回最后一个方法返回的值。

调用引用参数的委托

delegate void MyDelegate(ref int num);
值会叠加

委托就不举例说明了,is easy

事件:

1.事件是成员,不是类型 所有事件只能在类中声明,不能在一段可执行的代码中声明事件
要注意一点事件是成员,可以把它当做变量,不能独立于类
2.事件中包含一个私有的委托,触发事件时,通过委托调用方法列表中的数据

3.事件的声明:需要一委托

访问修饰副 event 返回值类型 委托名 事件名;
protected event void EventHandler myEvent;
定义事件时委托可以是自定义委托,也可以是.Net 预定义的委托类型
最常用的是 EventHandler委托
EventHandler 委托:
public delegate void EventHandler(object sender,EventArgs e);
由上可以看到此委托有两个参数,
第一个参数:表示调用委托的对象,object类型
第二个参数:保持状态信息(说白了就是传递参数),但是EventArgs 类没有提供可以传递数据的属性,如果需要
传递数据,可以继承EventArgs类。见 实例
public event void EventHandler myEvent;
实例:
public delegate void MyEventHandler(object sender,MyEventArgs me);
public partial class Form1 : Form
{
public event MyEventHandler myEvent;
public Form1()
{
InitializeComponent();
myEvent += new MyEventHandler(Form1_myEvent);
}

void Form1_myEvent(object sender, MyEventArgs me)

{
MessageBox.Show(me.Message);
}

private void btnClick_Click(object sender, EventArgs e)

{
MyEventArgs ma = new MyEventArgs();
ma.Message = "我们都是中国人,";
if (myEvent != null)
{
myEvent(sender,ma);
}
}
}

public class MyEventArgs : EventArgs

{
private String message;

public String Message

{
get { return message; }
set { message = value; }
}

}

最后注意:只有声明事件的类才能调用事件

 

转载于:https://www.cnblogs.com/jaifyhome/archive/2012/09/18/2689897.html

你可能感兴趣的文章
前端常用的几个js判断(二)(转载)
查看>>
20190509 大数据小牛学堂培训全套视频课程资源
查看>>
提取 linux 文件目录结构
查看>>
HTTPS那些事(三)攻击实例与防御
查看>>
GoldenGate单向复制配置示例
查看>>
03JavaScript程序设计修炼之道 2019-06-27_20-34-17 文本节点创建、文档碎片
查看>>
springMvc Velocity tool 源码分析
查看>>
Akka源码分析-Persistence-AtLeastOnceDelivery
查看>>
Oracle sql执行计划
查看>>
C++的MFC,与C#的.NET
查看>>
构建多页面应用——单个页面的处理
查看>>
Spring Tool Suite 配置和使用
查看>>
uva 562
查看>>
php简单开启gzip压缩方法(zlib.output_compression)
查看>>
java的访问权限
查看>>
修改apache+php上传文件大小限制
查看>>
2个YUV视频拼接技术
查看>>
logback日志异步打印
查看>>
文化之旅(NOIP2012普及组第四题)
查看>>
JS 输出对象的属性以及方法[转载]
查看>>