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

标签 c# .net events event-handling

我理解事件的目的,尤其是在创建用户界面的上下文中。我认为这是创建事件的原型(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/

相关文章:

c# - HttpClient - 包含非 ASCII 字符的 header

.net - IIS 7 中的 ASP.Net 中缓存图像的问题

.net - 从 .NET 调用 COM,它是适配器模式的一个例子吗?

Exchange 2010 上的 C# 和 powershell - 无法识别术语 'Group-Object'

C#.net - 如何提醒程序线程已完成(事件驱动)?

c# - 如何使用 string.Insert c# 在字符串中间插入撇号

c# - 字节分配不一致

c# - WPF MVVM ComboBox具有默认选定值

javascript - jQuery/JavaScript : Click event on a checkbox and the 'checked' attribute

JavaScript 显示旧事件