当前位置: 首页 > 知识库问答 >
问题:

对象重置方法还是事件订阅者的新参考?

璩涵衍
2023-03-14

(使用VS2010。假设性能不是问题)。

我有一个特定的对象,它为其所有属性更改实现事件。有时需要将对象“重置”为其所有默认属性值。最简单的方法是简单地构造一个新对象:

Object1=新建MyObject

但是,对于原始对象的任何事件订户,这等效于所有属性值的更改。例如,如果订阅者只侦听对属性 A 的更新,则现在还必须意识到新对象构造的可能性。这似乎为订阅者增加了额外的努力。(例如,也许我必须创建一个“新对象分配”事件,并且属性更改的订阅者也需要处理该事件。

因此,我正在考虑使用 Reset 方法来装备对象,因此上述代码更改为:

对象1.重置

这样Object1引用永远不会改变,Reset会手动将所有属性更改为默认值,从而触发所有属性更改的事件。但这也感觉不太对劲,而且与仅仅声明一个新对象相比很麻烦。我想这让我很恼火,因为我需要一个方法来手动重置所有属性或引发所有更改的事件——我必须记住每当新属性添加到类中时都要更新这个方法。或者这可能不像我想象的那样有问题。

这是一个足够简单的场景,我相信有一个最佳实践,不管怎样。哪个更好?

共有2个答案

邓浩漫
2023-03-14

我想我同意彼得·里奇的第一个评论,即我最初的问题缺乏确定“更好”方法所需的细节。目前,我可能会同意他的建议,即创建一个包装类,负责处理新的对象引用并向订阅者公开事件。

简滨海
2023-03-14

如果您需要您的事件处理程序保持附加状态,那么您将希望使用重置而不是创建新的实例。如果您的对象实现了< code > INotifyPropertyChanged ,那么您可以发送一个将< code>PropertyName设置为null的重置事件。

来自 MSDN:

属性Name 参数的空值或 null 表示所有属性都已更改。

 类似资料:
  • 从这个留档: RxJS为JavaScript引入了一个新的Push系统。可观察对象是多个值的生产者,将它们“推送”给观察者(消费者)。 订阅可观察对象类似于调用函数。 要调用可观察对象,我们应该从可观察对象本身调用函数,并将观察者作为可观察对象提供的数据的使用者传递,如: 本文件还说明: 什么是观察者?观察者是被观察者所传递价值的消费者。观察者只是一组回调,每个回调对应于被观察者发送的每种类型的通

  • Node.js应用程序可以使用composer-client.BusinessNetworkConnection.onAPI调用从业务网络订阅事件。事件在业务网络模型文件中定义,并由交易处理函数文件中的指定交易处理。有关发布事件的更多信息,请参阅发布事件。 在你开始之前 在应用程序可以订阅事件之前,你必须定义一些事件和发送它们的交易。还必须部署业务网络,并且必须具有可连接到该业务网络的连接配置文件

  • 客户对主题的订阅(即订阅者)的寿命是多少? 我之所以这么担心,是因为我认为服务总线的一个特点--持久的信息。因此,我认为在连接不稳定的情况下,可以保证提供持久的消息。 那么,当一个应用程序(多个应用程序中的一个)失去与服务总线的连接一天,然后第二天重新启动应用程序并实例化一个新的订阅客户端实例时,会发生什么呢?当其他应用程序由于自己的订阅已经处理了这些相同的消息时,应用程序是否会继续接收等待传递的

  • 由于Guava的留档很短,我在这里问它: 是否有办法将事件分派给多个订阅者,或者事件总是由第一个合适的订阅者使用? 如果是后者,为了添加这样的功能或在自己的应用程序中实现整个事件总线逻辑,是否最好扩展EventBus类?

  • 我正在寻找一种将多个订阅者附加到RxJava可观察流的方法,每个订阅者异步处理发出的事件。 我第一次尝试使用。flatMap(),但这似乎对任何后续订阅服务器都不起作用。所有订阅服务器都在同一线程上处理事件。 最终工作的是通过每次创建一个新的可观察的来消耗新线程中的每个事件: 输出: 以及多个订阅者的最终结果: 输出: 然而,这似乎有点笨拙。有没有更优雅的解决方案,或者RxJava不是一个很好的用

  • Tendermint 会发出不同的事件,您可以通过Websocket订阅这些事件。这对于第三方应用程序(如 analysys)或检查状态非常有用。 事件列表 您可以通过 Websocket 调用 subscribe RPC 方法订阅上面的任何事件。 { "jsonrpc": "2.0", "method": "subscribe", "id": "0", "para