喵喵是个小程序员 2019-08-17 14:44 采纳率: 71.4%
浏览 2111

C#事件学习:为什么要使用this.event.invoke(this,e)?和owner.eventHandler.invike直接使用区别在哪?

我根据学习的知识写个练习帮助理解,但我写的时候发现了两种方案,其中一种注释了。为什么还要费事去owner里写个action?直接使用注释里的那种不更简短吗?
注:存在eventEventArgs这种难以阅读的东西,第一个event是指练习用事件名,叫“event”

using System;

namespace _8._17
{
    class Program
    {
        static void Main(string[] args)
        {
            EventOwner eventOwner1 = new EventOwner();
            EventResponder eventResponder1 = new EventResponder();
            eventOwner1.Event1 += eventResponder1.EventAction;

            //eventOwner1.EventEventHandler1 += eventResponder1.EventAction;
            EventEventArgs e = new EventEventArgs();

            e.EventInput = "I am trying a event !";

            //eventOwner1.EventEventHandler1.Invoke(eventOwner1, e);
            eventOwner1.Action(e);
        }
    }
    public delegate void EventEventHandler(EventOwner eventOwner1, EventEventArgs e);
    public class EventEventArgs
    {
        public string EventInput { get; set; }
    }
    public class EventOwner
    {
        //public EventEventHandler EventEventHandler1;
        public event EventEventHandler Event1;

        public void Action(EventEventArgs e)
        {
            this.Event1.Invoke(this, e);
        }
    }
    public class EventResponder
    {
        public void EventAction(EventOwner eventOwner1, EventEventArgs e)
        {
            Console.WriteLine(e.EventInput);
        }
    }
}

  • 写回答

1条回答 默认 最新

  • threenewbee 2019-08-18 00:03
    关注

    事件的编写者和定义者不是一个人,并且先有了事件,才有了事件的处理函数。所以事件调用事件的处理函数不能直接调用。
    你不能写一个代码调用还没有编写出来的代码
    所以要事件

    评论

报告相同问题?

悬赏问题

  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥15 stable diffusion
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘