Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何明确地公开ReplaySubject或BehaviorSubject的行为而不公开观察者部分? 公共类Foo { 私有ReplaySubject whenBarChanged=新ReplaySubject(); 当被包围时,公共可视 { 获取{return whenbarched;} } }_C#_.net_System.reactive - Fatal编程技术网

C# 如何明确地公开ReplaySubject或BehaviorSubject的行为而不公开观察者部分? 公共类Foo { 私有ReplaySubject whenBarChanged=新ReplaySubject(); 当被包围时,公共可视 { 获取{return whenbarched;} } }

C# 如何明确地公开ReplaySubject或BehaviorSubject的行为而不公开观察者部分? 公共类Foo { 私有ReplaySubject whenBarChanged=新ReplaySubject(); 当被包围时,公共可视 { 获取{return whenbarched;} } },c#,.net,system.reactive,C#,.net,System.reactive,这段代码公开了一个可IObservable的接口,公开主体行为的唯一方法是通过文档 你知道暴露受试者可观察部分的其他方法是在不暴露观察者部分的情况下工作吗?无论是ReplaySubject还是behavior Subject都没有任何不属于IObserver或IObservable的方法。您想要公开哪些不在这两个接口中的“行为”?您可以用来隐藏可观察对象的身份 public class Foo { private ReplaySubject<bool> whenBarChan

这段代码公开了一个可IObservable的接口,公开主体行为的唯一方法是通过文档


你知道暴露受试者可观察部分的其他方法是在不暴露观察者部分的情况下工作吗?

无论是
ReplaySubject
还是
behavior Subject
都没有任何不属于
IObserver
IObservable
的方法。您想要公开哪些不在这两个接口中的“行为”?

您可以用来隐藏可观察对象的身份

public class Foo
{
    private ReplaySubject<bool> whenBarChanged = new ReplaySubject<bool>();
    public IObservable<bool> WhenBarChanged
    {
        get { return whenBarChanged; }
    }
}
公共类Foo
{
私有ReplaySubject whenBarChanged=新ReplaySubject();
当被包围时,公共可视
{
获取{return whenbarched.AsObservable();}
}
}

BehaviorSubject将始终触发最后一个值,并重新生成整个序列的Subject。我想给谁使用这个类的信息,这是IObservable的预期行为。如果我使用IObservable,则该信息不会通过类型传输,如果我使用XXXSubject,则我也会公开Observer部分。除了通过文档,没有其他方法可以做到这一点。语言的局限性在于我们无法表达可观察事物的语法。在我正在工作的系统中,我们有许多这样的
IObservables
,当您订阅时,我们已经记录了这些
IObservables将始终以“最新的已知值”开始。公开实现知识的需要是一种设计气味。客户机需要知道的是WhenBarChanged是一个IObservable
public class Foo
{
    private ReplaySubject<bool> whenBarChanged = new ReplaySubject<bool>();
    public IObservable<bool> WhenBarChanged
    {
        get { return whenBarChanged.AsObservable(); }
    }
}