我最近参加了C#的采访,在那里我被问到一个关于C#中的事件和代表的问题
这个人问我一个事件说按钮被点击,这被称为第一个事件或代表?
委托是否调用事件或事件调用委托?
我们可以在c#中没有代表的情况下举办活动吗?
Eri*_*ert 10
这个人问我一个事件说按钮被点击,首先被调用:事件或代表?
当你打开一扇门,首先打开门:门或门把手?
咦?
这个问题没有任何意义.你用门把手打开一扇门,但你没有打开门把手.
"召集"一个事件意味着什么?事件不是你打电话的事情.事件是你提出的事情.提升事件与调用委托相同.
委托是否调用事件或事件调用委托?
门是否打开门把手,或门把手是否打开门?
同样,这个问题没有意义.门把手不是可以"打开"的东西,门把手不会打开门 - 你打开门,握住门把手.
代表是否致电该活动?没有; 事件不是可以被"召唤"的事物.该事件是否会调用该委托?不,提升事件的代码会调用委托.
我们可以在c#中没有代表的情况下举办活动吗?
是的,在某种意义上,与事件关联的委托引用可以是空引用.但是每个事件都与委托类型相关联,并以某种方式与委托相关联.
整套问题向我表明提问者对事件与代表之间的关系没有很好的理解.考虑它的一个好方法是,事件只是一个包含对多播委托的引用的属性.虽然属性具有获取和设置属性值的特殊方法,但事件具有向多播委托添加和删除委托的特殊方法.
事件只是在 .NET 中作为多播委托实现的代码构造。
当“引发”事件时(只能由与事件同一类中的代码完成;事件引发必须在“受保护”范围内发生),一次会以同步方式(但不一定)调用一个委托以任何确定性顺序。该事件是委托,因此当单击按钮引发事件时,委托将由运行时调用,该运行时已收到用户单击按钮的 GUI 区域的 Windows 消息。
语句“引发事件”和“调用委托”是等效的语句;这就像问“先有鸡还是先有鸡?”。
现在,事件经常级联,尤其是当我们谈论 UI 时。有一个 MouseUp 事件,在释放鼠标按钮时调用,该事件可以触发一个或多个其他事件,例如 MouseClick、MouseDoubleClick、DragDrop 等。您可能不会将处理程序附加到 MouseUp 事件,但有内置逻辑在 MouseUp 的幕后引发您要处理的 MouseClick 事件。因此,从这个意义上说,您可以说 MouseUp 事件“首先出现”并调用 MouseClick 处理程序委托。
| 归档时间: |
|
| 查看次数: |
567 次 |
| 最近记录: |