gpt4 book ai didi

c# - C#中的Click事件和用户定义的事件有什么区别

转载 作者:太空宇宙 更新时间:2023-11-03 17:41:20 25 4
gpt4 key购买 nike

我正在尝试更好地理解事件,并且我看到了一些让我感到困惑的代码行..
我知道,例如,当我想声明一个事件并稍后订阅它时,我会这样做:

public event EventHandler MyEvent;
...
MyEvent += MyFunction;
MyEvent += new SomeClass().SomeFunction;

所以在这里我声明了这个事件并订阅了一些函数。这简单。

后来我发现了这段代码:
protected void Page_Load(object sender, EventArgs e)
{
for(int i =0; i<5; i++)
{
Button btn = new Button();
btn.Text = "Button " + i.ToString();
Panel1.Controls.Add(btn);
btn.Click += new EventHandler(this.BtnFunction);
}
}

void BtnFunction(object sender, EventArgs e)
{
Button btn = (Button)sender;
Label1.Text = btn.Text;
}

现在我无法理解的是这里的这一行: btn.Click += new EventHandler(this.BtnFunction);问题是:
  • 为什么我使用 new EventHandler(this.BtnFuncion) ?是不是 Click EventHandler 类型的事件?
  • 是否 EventHandler有一个构造函数,为什么它现在需要订阅这个事件的函数?
  • 最佳答案

    .Net BCL 的事件和用户定义的事件没有区别。 Click事件如下:

    public event EventHandler Click;

    EventHandler是一个委托(delegate)类型,在.Net BCL 的事件中使用。我想您已经看到了一些事件处理程序,例如 void function(object sender, EventArgs e) . EventHandler就像下面这样:
    public delegate void EventHandler(object sender, EventArgs e);
    public delegate void EventHandler<TEventArgs>(object sender, TEventArgs e);

    第二个代表, EventHandler<TEventArgs>当事件需要发送一些信息时使用。例如:
    public event EventHandler<SomeClass> MyEvent;

    编辑:请注意 SomeClass建议继承 EventArgs对于协方差

    关于c# - C#中的Click事件和用户定义的事件有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20875026/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com