问题描述
除了作为语法糖之外,我没有看到使用事件相对于委托的优势.也许我理解错了,但似乎事件只是代表的占位符.
I don't see advantages of using events over delegates, other than being syntactical sugar. Perhaps I am misunderstanding, but it seems that event is just a placeholder for delegate.
您能向我解释一下这些区别以及何时使用哪个?有什么优点和缺点?我们的代码深深植根于事件,我想深入了解它.
Would you explain to me the differences and when to use which? What are the advantages and disadvantages? Our code is heavily rooted with events, and I want to get to the bottom of it.
您何时会在事件上使用委托,反之亦然?请在生产代码中说明您对两者的真实体验.
When would you use delegates over events and vice versa? Please state your real world experience with both, say in the production code.
推荐答案
从技术角度来看,其他答案已经解决了这些差异.
From the technical standpoint, other answers have addressed the differences.
从语义的角度来看,事件是对象在满足某些条件时引发的动作.例如,我的 Stock 类有一个名为 Limit 的属性,当股票价格达到 Limit 时它会引发一个事件.此通知是通过事件完成的.是否有人真正关心这个事件并订阅它超出了所有者类的关注.
From a semantics perspective, events are actions raised by an object when certain conditions are met. For example, my Stock class has a property called Limit, and it raises an event when the stock prices reaches the Limit. This notification is done via an event. Whether anyone actually cares about this event and subscribes to it is beyond the concern of the owner class.
委托是一个更通用的术语,用于描述类似于 C/C++ 术语中的指针的构造..Net 中的所有代表都是多播代表.从语义的角度来看,它们通常用作一种输入.特别是,它们是实现策略模式的完美方式.例如,如果我想对一个对象列表进行排序,我可以为该方法提供一个 Comparator 策略来告诉实现如何比较两个对象.
A delegate is a more generic term to describe a construct similar to a pointer in C/C++ terms. All delegates in .Net are multicast delegates. From a semantics perspective, they are generally used as a kind of input. In particular, they are a perfect way to implement the Strategy Pattern. For example, if I want to sort a List of objects, I can provide a Comparator strategy to the method to tell the implementation how to compare two objects.
我在生产代码中使用了这两种方法.当满足某些属性时,我的大量数据对象会发出通知.最基本的示例,每当属性更改时,都会引发 PropertyChanged 事件(请参阅 INotifyPropertyChanged 接口).我在代码中使用了委托来提供将某些对象转换为字符串的不同策略.这个特定示例是一个美化的 ToString() 实现列表,用于特定对象类型以将其显示给用户.
I have used the two methods in production code. Tons of my data objects notify when certain properties are met. Most basic example, whenever a property changes, a PropertyChanged event is raised (see INotifyPropertyChanged interface). I have used delegates in code to provide different strategies of turning certain objects into string. This particular example was a glorified ToString() list of implementations for a particular object type to display it to users.
这篇关于事件和委托及其各自应用程序之间的区别的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!