gpt4 book ai didi

C#:事件处理程序委托(delegate)

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

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

在上面的代码中,EventHandler 是一个接受object sender, EventArgs e 的委托(delegate)。但是,参数数量在以下实现中不匹配:

this.baptismApplication_add_button.Click += new System.EventHandler(this.baptismApplication_add_button_Click);

我可以看到 senderthis.baptismApplication_add_button_Click,但是方法调用的哪一部分有 EventArgs e ?它是隐式的吗?还是我做错了?

最佳答案

delegate 是特殊类型。它们委托(delegate)方法。这:

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

不是是否意味着要创建一个EventHandler,您需要传入两个参数sendere .它只是意味着

EventHandler represents a method with the signature of (object sender, EventArgs e) returning void.

要创建一个EventHandler,您需要传入一个具有所需签名的方法。例如这个方法:

private void MyMethod(object sender, EventArgs e) {

}

您可以像这样创建一个EventHandler:

new EventHandler(MyMethod);

请注意我没有在方法名称后写 ()。这样做会调用该方法。我们不想要那样。在这里我们只是想引用它。

让我们看另一个例子。

public delegate void Action();

要创建一个Action,您需要一个没有参数并返回void 的方法。像这样:

private void MyMethod2() {}
// ...
new Action(MyMethod2);

现在您了解了委托(delegate)的工作原理,我们可以讨论如何正确订阅 Click 事件。

正如我所说,EventHandler 的“构造函数”将方法作为参数,因此您不应将按钮传递到那里。你需要一个方法。让我们写一个:

private void ButtonPressed(object sender, EventArgs e) {
Console.WriteLine("Hello World");
}

现在我们可以用这个方法创建委托(delegate):

yourButton.Click += new EventHandler(this.ButtonPressed);

这实际上可以缩短为:

yourButton.Click += ButtonPressed;

现在每次按下按钮都会打印“Hello World”。

关于C#:事件处理程序委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45730707/

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