当前位置: 首页 > news >正文

C# EventHander

EventHandler 是在编程中,特别是在面向对象的编程中,用于处理事件的一个特殊类型的委托(delegate)。事件是当某个特定动作或情况发生时,对象通知其他对象的一种方式。而 EventHandler 就是一个允许你定义当这个事件发生时应该执行什么代码的机制。

C# 中,EventHandler 是一个预定义的委托,通常用于没有特定参数或返回值的简单事件。它的定义如下:

public delegate void EventHandler(object sender, EventArgs e);

这里,sender 是触发事件的对象,而 e 是包含事件数据的 EventArgs 对象(或其派生类)。通过这两个参数,事件处理程序可以了解是哪个对象触发了事件,以及关于该事件的一些额外信息。

当你要在类中定义一个事件时,可以使用 event 关键字和 EventHandler 委托类型。例如:

public class MyClass  
{  
    // 声明一个事件  
    public event EventHandler MyEvent;  
  
    // 触发事件的方法  
    protected virtual void OnMyEvent(EventArgs e)  
    {  
        MyEvent?.Invoke(this, e);  
    }  
  
    // 在某个地方调用这个方法以触发事件  
    public void DoSomething()  
    {  
        // ... 执行一些操作 ...  
        OnMyEvent(EventArgs.Empty); // 触发事件,传递一个空的 EventArgs 对象  
    }  
}

其他类可以订阅这个事件,并提供一个方法来处理它:

public class AnotherClass  
{  
    private MyClass myClassInstance;  
  
    public AnotherClass(MyClass myClassInstance)  
    {  
        this.myClassInstance = myClassInstance;  
        this.myClassInstance.MyEvent += MyClass_MyEvent; // 订阅事件  
    }  
  
    private void MyClass_MyEvent(object sender, EventArgs e)  
    {  
        // 当 MyEvent 被触发时,这个方法会被调用  
        Console.WriteLine("MyEvent was raised by " + sender);  
    }  
}

在这个例子中,当 MyClassDoSomething 方法被调用并触发 MyEvent 事件时,AnotherClass 中的 MyClass_MyEvent 方法就会被执行。

需要注意的是,EventHandler 只是处理事件的一种方式。在更复杂的场景中,你可能需要定义自定义的委托类型,以便能够传递更多的事件相关信息。例如,你可以定义一个带有自定义事件参数类型的委托,以便在触发事件时传递更具体的数据。

总结

通过EventHander这个简易委托来生成一个事件,比如鼠标点击,
然后这个事件发生了(鼠标按了),就会执行先前绑定到这个事件上的委托,
委托可以广播

相关文章:

  • Linux 安装Mysql
  • c++数字和字符串的转化
  • 常用的几个ChatGPT网站,国内可用!
  • 원클릭으로 주류 전자상거래 플랫폼 상품 상세 데이터 수집 및 접속 시연 예제 (한국어판)
  • 版本 23.0.0 , docker 安装 , docker目录迁移正确方法
  • BaseDao增删改查
  • HTTPS
  • 使用filezilla连接Ubuntu22.04虚拟机
  • Linux renice命令教程:如何优雅地调整进程优先级(附案例详解和注意事项)
  • 【笔试】美团2023年秋招第5场笔试(后端数开软件方向)
  • Linux内核之debugfs_create_dir与debugfs_create_file实例与调用栈流程(三十二)
  • 每日一题 --- 四数相加 II[力扣][Go]
  • 星闪BLE与蓝牙
  • maven 依赖机制
  • 鸿蒙系统,作为华为自主研发的一款全新操作系统
  • 要将Oracle中的表从按年分区转换为按月分区,并且保持数据不变,不锁表
  • 程序汪若依微服务华为云Linux部署保姆教程
  • QGraphicsView实现图片放大、缩小、鼠标拖动、以鼠标点放大缩小
  • SpringBoot集成Solr全文检索
  • 非隔离恒压AC-DC电源IC:SM7035P
  • 胖东来发布和田玉、翡翠退货说明:不扣手续费等任何费用
  • 马克思主义理论研究教学名师系列访谈|曾瑞明:想通了才可能认准,认准了才能做好
  • 两部门发布外汇领域行刑反向衔接案例,织密金融安全“防护网”
  • 马上评|不再提“智驾”,新能源车企回归理性
  • 一揽子十条货币政策措施出炉:降准降息,设立五千亿服务消费与养老再贷款
  • 李云泽:将加快出台与房地产发展新模式相适配的系列融资制度