除了语法上的糖以外,我没有看到使用事件优于委托的优势。也许我误会了,但似乎该事件只是代表的占位符。
您能给我解释一下区别和何时使用吗?优点和缺点是什么?我们的代码深深植根于事件,我想深入了解它。
什么时候在事件上使用委托,反之亦然?请在生产代码中说明这两种情况的实际使用经验。
从技术角度来看,其他答案也解决了这些差异。
从语义的角度来看,事件是指满足特定条件时对象引发的动作。例如,我的Stock类具有一个名为Limit的属性,当股票价格达到Limit时会引发一个事件。该通知是通过事件完成的。是否有人真的在乎并订阅该事件,是所有者类所不关心的。
委托是一个更通用的术语,用于描述类似于C / C ++术语中的指针的构造。.Net中的所有委托都是多播委托。从语义的角度来看,它们通常用作一种输入。特别是,它们是实施策略模式的理想方法。例如,如果要对对象列表进行排序,则可以向该方法提供比较器策略,以告诉实现如何比较两个对象。
我在生产代码中使用了两种方法。当满足某些属性时,我的数据对象会发出通知。最基本的示例,每当属性更改时,都会引发PropertyChanged事件(请参见INotifyPropertyChanged接口)。我在代码中使用委托来提供将某些对象转换为字符串的不同策略。这个特定的示例是一个特定对象类型的实现的美化ToString()列表,以将其显示给用户。