事件和委托及其各自应用程序之间的区别

Difference between events and delegates and its respective applications(事件和委托及其各自应用程序之间的区别)
本文介绍了事件和委托及其各自应用程序之间的区别的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

除了作为语法糖之外,我没有看到使用事件相对于委托的优势.也许我理解错了,但似乎事件只是代表的占位符.

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.

这篇关于事件和委托及其各自应用程序之间的区别的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

DispatcherQueue null when trying to update Ui property in ViewModel(尝试更新ViewModel中的Ui属性时DispatcherQueue为空)
Drawing over all windows on multiple monitors(在多个监视器上绘制所有窗口)
Programmatically show the desktop(以编程方式显示桌面)
c# Generic Setlt;Tgt; implementation to access objects by type(按类型访问对象的C#泛型集实现)
InvalidOperationException When using Context Injection in ASP.Net Core(在ASP.NET核心中使用上下文注入时发生InvalidOperationException)
LINQ many-to-many relationship, how to write a correct WHERE clause?(LINQ多对多关系,如何写一个正确的WHERE子句?)