繁体   English   中英

使用 myevent(this,EventArgs.Empty) 的目的是什么?

[英]What is the purpose of using myevent(this,EventArgs.Empty)?

我目前正在学习 csharp 中的委托和事件。我有以下一组代码:

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

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

class event1
{
    public event mydel myevent;

    public void onfive()
    {
        Console.WriteLine("I am onfive event");
        Console.ReadKey();
        if (myevent != null)
        { 
            myevent(this,EventArgs.Empty);
        }
    }
}

public class test
{
    public static void Main()
    {
        event1 e1 = new event1();
        e1.myevent += new mydel(fun1);

        Random ran = new Random();
        for (int i = 0; i < 10; i++)
        {
            int rn = ran.Next(6); 
            Console.WriteLine(rn);
            Console.ReadKey();

            if (rn == 5)
            {
                e1.onfive(); 
            }
        }
    }

    public static void fun1(object sender, EventArgs e)
    {
        Console.WriteLine(" i am surplus function called due to use of '+=' ");
        Console.ReadKey();
    }
}

EventArgs: EventArgs是此事件的实现者可能有用的参数。 使用OnClick时,它没有任何好处,但是在某些情况下,例如在GridView中“ SelectedIndexChanged”中说,它将包含新索引或其他有用数据。

EventArgs.Empty:用于将值传递给与没有数据的事件关联的事件处理程序。

您的事件属于mydel类型。

公共mydel myevent; //声明具有签名void mydel()的mydel类型的事件

希望这可以给您一些火花。

这段代码引发了事件。 如果未引发事件,则不执行事件处理程序。

委托是引用方法的对象,事件类似于委托的集合。 如果您不向事件添加任何处理程序,那么将没有集合,因此检查null 如果事件不为null则意味着已注册处理程序。 if语句中的行引发该事件,这意味着调用集合中的每个委托。 调用每个委托时,都会执行它所引用的方法。 执行的方法是事件处理程序。

if (myevent != null) //Checks so you instantiated a event
 { 
  myevent(this,EventArgs.Empty); //{this} will be equal to the sender in delegete myDel, 
{EventArgs.Empty} is since you are not passing any arguments to your delegate. 
 } 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM