gpt4 book ai didi

C#:了解事件语法

转载 作者:太空狗 更新时间:2023-10-29 20:44:05 27 4
gpt4 key购买 nike

我需要一些帮助来了解如何创建新的自定义事件。我读自here ...

public delegate void ChangingHandler (object sender, CarArgs ca); 
public event ChangingHandler Change;
...
private void car_Change(object sender, CarArgs ca) {
MessageBox.Show(ca.Message());
}
...
car.Change+=new Car.ChangingHandler(car_Change); // add event handler
...
Change(this,ca); // call event

第一,我不太了解代表部分。在一个普通的变量声明中,

protected string str1;

但这里我有额外的 (ChangingHandler)。我怎么理解这个?我知道它类似于 ChangingHandler 的东西将用于处理事件,但它让我有点失望。

public event ChangingHandler Change

然后

car.Change+=new Car.ChangingHandler(car_Change)

我真的不明白语法 new Car.ChangingHandler(car_Change)

最佳答案

C# 中的事件有点像方法指针的集合。它说“嘿大家,如果你关心我,给我一个我可以调用的方法的指针,我会坚持下去,当我想向世界宣布发生了什么时,我会调用所有的方法你给了我。”

这样,某人就可以为事件提供指向他们的方法的指针,这被称为“事件处理程序”。只要事件所有者认为合适,事件就会调用此方法。

从这个意义上说,委托(delegate)无非是说事件将接受什么样的方法。你不能让一个人为事件提供一个不带参数的方法和一个带 5 个参数的方法,它不知道如何调用它们。所以委托(delegate)是事件和事件处理程序之间的契约,告诉他们双方对方法签名的期望。

在您的情况下,最好只使用 EventHandler<T> ,这是一个内置委托(delegate),形式为 void EventHandler<T>(object sender, T eventArgs)对于您的事件委托(delegate),像这样:

public event EventHandler<CarArgs> Change;

C# 实际上并没有原始意义上的函数指针。代表处理这个。它们就像强类型的、面向对象的函数指针。当你打电话时

car.Change+=new Car.ChangingHandler(car_Change);

您正在为该事件提供一个指向您的 car_Change 事件处理程序的新委托(delegate)(函数指针),告诉该事件在准备就绪时调用您的 car_Change 方法。委托(delegate)(new ChangeHandler(...) 只是将指向 car_Change 方法的指针包装起来。

关于C#:了解事件语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3548242/

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