gpt4 book ai didi

c# - 了解 C# 中的事件和事件处理程序

转载 作者:IT王子 更新时间:2023-10-29 03:28:16 25 4
gpt4 key购买 nike

我理解事件的目的,尤其是在创建用户界面的上下文中。我认为这是创建事件的原型(prototype):

public void EventName(object sender, EventArgs e);

事件处理程序有什么作用,为什么需要它们,我该如何创建?

最佳答案

要了解事件处理程序,您需要了解delegates .在 C# ,您可以将委托(delegate)视为方法的指针(或引用)。这很有用,因为指针可以作为值传递。

委托(delegate)的核心概念是它的签名或形状。即 (1) 返回类型和 (2) 输入参数。例如,如果我们创建一个委托(delegate) void MyDelegate(object sender, EventArgs e),它只能指向返回 void 的方法,并接受一个 objectEventArgs。有点像方孔和方钉。所以我们说这些方法与委托(delegate)具有相同的签名或形状。

知道如何创建对方法的引用后,让我们考虑一下事件的目的:我们希望在系统其他地方发生某些事情时执行一些代码 - 或者“处理事件”。为此,我们为要执行的代码创建了特定的方法。事件和要执行的方法之间的粘合剂是委托(delegate)。事件必须在内部存储一个指向方法的指针“列表”,以便在引发事件时调用。*当然,为了能够调用方法,我们需要知道要传递给它的参数!我们使用委托(delegate)作为事件和将要调用的所有特定方法之间的“契约”。

因此默认的 EventHandler(以及许多类似的)表示一个特定形状的方法(同样是 void/object-EventArgs)。当您声明一个事件时,您是在通过指定一个委托(delegate)来说明该事件将调用哪种形式的方法 (EventHandler):

//This delegate can be used to point to methods
//which return void and take a string.
public delegate void MyEventHandler(string foo);

//This event can cause any method which conforms
//to MyEventHandler to be called.
public event MyEventHandler SomethingHappened;

//Here is some code I want to be executed
//when SomethingHappened fires.
void HandleSomethingHappened(string foo)
{
//Do some stuff
}

//I am creating a delegate (pointer) to HandleSomethingHappened
//and adding it to SomethingHappened's list of "Event Handlers".
myObj.SomethingHappened += new MyEventHandler(HandleSomethingHappened);

//To raise the event within a method.
SomethingHappened("bar");

(*这是 .NET 中事件的关键,它揭开了“魔法”的面纱——在幕后,事件实际上只是具有相同“形状”的方法列表。该列表存储在事件所在的位置生活。当事件被“引发”时,它实际上只是“通过这个方法列表并调用每个方法,使用这些值作为参数”。分配事件处理程序只是将方法添加到此的更漂亮,更简单的方法要调用的方法列表)。

关于c# - 了解 C# 中的事件和事件处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/803242/

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