UniRx 中的 BehaviorSubject 和 ReactiveProperty 有什么区别?
What is the difference between a BehaviorSubject and a ReactiveProperty in UniRx?
有什么区别?对我来说,它们看起来非常相似......你为什么要用一个而不是另一个?
行为主题是主题class的实现之一。它允许您检索使用 outObserver.
推送的最后一个值
响应式 属性 用于在发生某些事情时提供某种排序通知,它是回调的更简单替代方案。
例如:
如果您想将很多方法链接到游戏中的动作,例如玩家的移动,您可以使用此 Rective 属性.
如果你想获得最后被推送的值,例如在格斗游戏中进行连击,你可以使用行为主题。
它们的相似之处在于它们都将存储最后给定的值并且您可以通过 public 属性.
访问它们
区别是:
ReactiveProperty
将发出事件 当且仅当值已更改 .
BehaviorSubject
将发出一个事件,无论新值是什么。
在他们的 C# 代码(开源)中 ReacitveProperty
检查新值和上一个值的相等性; BehaviorSubject
没有。事实上 none 的 ISubject
实现检查相等性。
什么时候应该使用一个而不是另一个?
当我只希望回调值发生变化时,我会使用 ReactiveProperty
,即使替换可能更频繁地发生。当替换发生时我想要回调时,我会使用 BehaviourSubject
。
在大多数情况下,ReactiveProperty
更有用,因为通常您希望对更改做出反应。 BehaviorSubject
虽然不太常见,但有其自身的用途。
其他注意事项:
ReactiveProperty.SetValueAndForceNotify()
可用于调用回调,无论是否相等。
IObservable.DistinctUntilChanged()
可用于(次要)引入相等性检查。
有什么区别?对我来说,它们看起来非常相似......你为什么要用一个而不是另一个?
行为主题是主题class的实现之一。它允许您检索使用 outObserver.
推送的最后一个值响应式 属性 用于在发生某些事情时提供某种排序通知,它是回调的更简单替代方案。
例如: 如果您想将很多方法链接到游戏中的动作,例如玩家的移动,您可以使用此 Rective 属性.
如果你想获得最后被推送的值,例如在格斗游戏中进行连击,你可以使用行为主题。
它们的相似之处在于它们都将存储最后给定的值并且您可以通过 public 属性.
访问它们区别是:
ReactiveProperty
将发出事件 当且仅当值已更改 .BehaviorSubject
将发出一个事件,无论新值是什么。
在他们的 C# 代码(开源)中 ReacitveProperty
检查新值和上一个值的相等性; BehaviorSubject
没有。事实上 none 的 ISubject
实现检查相等性。
什么时候应该使用一个而不是另一个?
当我只希望回调值发生变化时,我会使用 ReactiveProperty
,即使替换可能更频繁地发生。当替换发生时我想要回调时,我会使用 BehaviourSubject
。
在大多数情况下,ReactiveProperty
更有用,因为通常您希望对更改做出反应。 BehaviorSubject
虽然不太常见,但有其自身的用途。
其他注意事项:
ReactiveProperty.SetValueAndForceNotify()
可用于调用回调,无论是否相等。IObservable.DistinctUntilChanged()
可用于(次要)引入相等性检查。