随笔 - 33, 文章 - 0, 评论 - 148, 阅读 - 92595
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

获取事件被注册的次数

Posted on   ghwghw  阅读(612)  评论(3编辑  收藏  举报

刚才看了Artech的也谈事件的文章,文章地址:http://www.cnblogs.com/artech/archive/2010/07/10/1774833.html,他在这篇文章中讲到了MulticastDelegate 类,他说事件本质上是一个MulticastDelegate对象,由此我想到使用MulticastDelegate 类来获取一个事件被注册的次数,下面是我写的一个测试类来测试MulticastDelegate 能否来获取事件被注册的次数,结果是可以获取的,代码如下:

 

复制代码
代码
class Program
{
static void Main(string[] args)
{
EventCountTest a
= new EventCountTest();
a.Print
+= new EventHandler(Event1);
a.Print
+= new EventHandler(Event2);
a.Print
+= new EventHandler(Event2);
//调用次方法将触发事件
a.Invok();
}

static void Event1(object sender, EventArgs e)
{
Console.WriteLine(
"Event1");
}
static void Event2(object sender, EventArgs e)
{
Console.WriteLine(
"Event2");
}
static void Event3(object sender, EventArgs e)
{
Console.WriteLine(
"Event3");
}
}
/// <summary>
/// 定义一个用来测试事件被注册次数的类
/// </summary>
public class EventCountTest
{
public event EventHandler Print;
//模拟事件被调用
public void Invok()
{
if (Print != null)
{
//打印事件被注册的次数
Console.WriteLine((Print as MulticastDelegate).GetInvocationList().Count().ToString());
Print(
this,new EventArgs());
}
}
}
复制代码

 

 

 有一点要注意的是,只能在类内部获取该事件被注册的次数

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示