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

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 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题