对事件触发(EventHandler)的简单理解

当某个对象的某个事件或者是执行过程发生了,这个对象可以通过事件通知另外一个对象,另外一个对象可以通过传递进来的参数进行相应的处理;

网上有很多关于事件触发的例子,借鉴其中的一个例子对事件触发做如下理解:

定义事件触发需要如下3步

一、事件参数Class定义

  1. 定义事件的参数

二、事件Class定义

1、定义一个事件对象

2、定义可以触发此事件的函数

三、使用Class定义

    1、定义事件处理函数

    2、定义一个事件Class变量

    3、对事件Class变量使用+=进行委托

    4、对事件Class变量调用可以触发此事件的函数

代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    // 事件参数,继承类EventArgs
    public class AddEventData : EventArgs
    {
        public int a;
        public int b;
    }
    // 事件Class
    public class Test
    {
        // 事件对象
        public event EventHandler<AddEventData> OnAddEvent;
        // 触发事件
        public void CallAddEvent()
        {
            if (OnAddEvent != null)
            {
                AddEventData ad = new AddEventData();
                ad.a = 1;
                ad.b = 2;
                OnAddEvent(this, ad);
            }
        }
    }

   // 使用Class
    class Program
    {
        static void Main(string[] args)
        {
            Test tst = new Test();           
            tst.OnAddEvent += new EventHandler<AddEventData>(AddEvent);         
            tst.CallAddEvent();         // 触发事件            

            Console.Read(); // 暂停程序
        }
        // 事件处理函数
        static void AddEvent(object sender, EventArgs e)
        {
            AddEventData ad = (AddEventData)e;
            int c = ad.a + ad.b;
            Console.WriteLine("触发事件AddEvent, a+b={0}", c);
        }
    }
}

 

  • 19
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
在 C# 中,可以通过事件触发其他事件。这可以通过在事件处理程序中调用其他事件的委托来实现。下面是一个简单的示例: ```csharp using System; public class EventExample { // 声明事件和对应的委托 public event EventHandler FirstEvent; public event EventHandler SecondEvent; // 触发第一个事件 public void TriggerFirstEvent() { OnFirstEvent(EventArgs.Empty); } // 触发第二个事件 public void TriggerSecondEvent() { OnSecondEvent(EventArgs.Empty); } // 调用第一个事件的委托 protected virtual void OnFirstEvent(EventArgs e) { FirstEvent?.Invoke(this, e); } // 调用第二个事件的委托 protected virtual void OnSecondEvent(EventArgs e) { SecondEvent?.Invoke(this, e); } } public class Program { public static void Main(string[] args) { EventExample example = new EventExample(); // 订阅第一个事件 example.FirstEvent += (sender, e) => { Console.WriteLine("First event triggered"); }; // 在第一个事件触发时,触发第二个事件 example.FirstEvent += (sender, e) => { Console.WriteLine("Second event triggered from first event"); example.TriggerSecondEvent(); }; // 订阅第二个事件 example.SecondEvent += (sender, e) => { Console.WriteLine("Second event triggered"); }; // 触发第一个事件 example.TriggerFirstEvent(); } } ``` 在上面的示例中,我们定义了两个事件 `FirstEvent` 和 `SecondEvent`,并在 `Main` 方法中订阅和触发这些事件。当第一个事件触发时,它会调用第二个事件的委托,从而触发第二个事件。输出结果将是: ``` First event triggered Second event triggered from first event Second event triggered ``` 这样,通过在事件处理程序中调用其他事件的委托,我们就可以实现一个事件触发其他事件的机制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值