final class · System.Reactive
Computed<T>
public final class Computed<T>
A value computed from reactive ones, kept until one of them changes: what computed T P => e; makes.
- Kind
- final class
- Namespace
- System.Reactive
- Assembly
- System.Core
- Access
- public, final
- Source file
Reactive.ant
Type parameters
| Name | Constraints |
|---|---|
T | any type |
Inheritance
- Base classes
-
AnyComputed<T>
Constructors
new(func : T compute)
#
Properties
T Value { get; }
#
The value (computed now when stale); reading it inside an effect makes the effect depend on it.
Whether the next read computes it again.
Methods
Dispose()
#
Stops tracking: it keeps its last value and no Source invalidates it again.
Private and internal members (5)
Inherited members (5)
GetTypemethod from AnyUndescribedmethod from AnyToStringmethod from AnyHashmethod from Anydestroymethod from Any
Source
Computed<T> as Antril, decompiled from its Larva HIR.
// System.Reactive.Computed — System.Core (decompiled from Larva HIR)
into namespace System.Reactive
{
/// A value computed from reactive ones, kept until one of them changes: what `computed T P => e;` makes.
public final class Computed<T>
{
func : T compute;
T value;
Source source;
Effect tracker;
Refresh()
{
value = compute();
}
public:
new(func : T compute)
{
source = new Source();
this.compute = compute;
tracker = new Effect(() => { Refresh(); });
tracker.Lazy = true;
tracker.Stale = true;
tracker.Dependents = source;
}
/// Stops tracking: it keeps its last value and no Source invalidates it again.
Dispose()
{
tracker.Dispose();
}
/// The value (computed now when stale); reading it inside an effect makes the effect depend on it.
T Value
{
get
{
source.Track();
if (tracker.Stale || tracker.Pending)
Reactive.Refresh(tracker);
return value;
}
}
/// Whether the next read computes it again.
bool Stale
{
get => tracker.Stale;
}
}
}