惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

IT之家
IT之家
Engineering at Meta
Engineering at Meta
腾讯CDC
宝玉的分享
宝玉的分享
H
Help Net Security
I
InfoQ
博客园 - Franky
The GitHub Blog
The GitHub Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Microsoft Security Blog
Microsoft Security Blog
M
MIT News - Artificial intelligence
博客园_首页
美团技术团队
Recent Announcements
Recent Announcements
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
雷峰网
雷峰网
The Cloudflare Blog
博客园 - 司徒正美
Vercel News
Vercel News
MyScale Blog
MyScale Blog
人人都是产品经理
人人都是产品经理
爱范儿
爱范儿
月光博客
月光博客

博客园 - csu02

erp asp+com 删除表的一列 更改列名 分页 千万数量级分页存储过程 XML的五种用途~ 表的列数 列名 得到一个省份,城市数据库 window.open()的所有参数列表 存儲過程解密SQL 分页控件 返回存儲過程的多個輸出字段 SqlCommand 与 SqlDataAdapter 产生一个int数组,长度为100,并向其中随机插入1-100 dataGrid使用 绑定 定向到Url 学到的程序结构 几个系统 利用IFRAME 让每个页面都继承菜单控 不是用户自定义控件来实现的 完成单元测试
C#事件机制学习
csu02 · 2006-07-06 · via 博客园 - csu02

c#的事件机制是基于委托实现的。实现一个事件,要先定义一个委托类型
class1
{
 public delegate void mydelegate (myeventargs e);
 public event mydelegate event1;
}
然后我们可以使用+=和-=注册、移除事件
class1.event1 += new mydelegate(new myeventargs());
在class中引发事件时最好这样
class1
{
 public fireevent()
 {
  if(event1 != null)
   event1();
 }
}


如果不想声明自己的委托类型的话,可以使用system.eventhandler的委托类型
public delegate void eventhandler(object sender, eventargs e);
其中eventargs转送附加参数。
可以实现自己的eventargs类
class myeventargs:eventargs
{
}
类名最好以eventargs 结尾,这是个默认规则
调用时如果不想使用参数可以传递
eventargs.empty

事件其实背后做了很多工作,自动生成一个委托实例、一个注册委托的add_xxx方法、一个注销委托的

remove_xxx方法。事实上这两个方法可以自己定制。只要声明事件时使用以下语法:
   public event mydelegate1 event1
   {
      add
      {
      }
      remove
      {
      }
   }
在其中实现自己的注册函数即可。看上去是不是很像属性的定义:)