Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.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# 4.0 我是否应该公开ISubject<;T>;或可观察到<;T>;和IObserver<;T>;?_C# 4.0_System.reactive - Fatal编程技术网

C# 4.0 我是否应该公开ISubject<;T>;或可观察到<;T>;和IObserver<;T>;?

C# 4.0 我是否应该公开ISubject<;T>;或可观察到<;T>;和IObserver<;T>;?,c#-4.0,system.reactive,C# 4.0,System.reactive,我有一个我希望用户能够订阅和推送到的值,所以在我的类内部我使用Subject 当将此值作为属性公开时,我最好将其作为ISubject公开,还是将ISubject拆分为IObserver和IObservable更好 备选案文1: private readonly ISubject<bool> isLightOn = new Subject<bool>(); public ISubject<bool> IsLightOn {

我有一个我希望用户能够订阅和推送到的值,所以在我的类内部我使用Subject

当将此值作为属性公开时,我最好将其作为ISubject公开,还是将ISubject拆分为IObserver和IObservable更好

备选案文1:

    private readonly ISubject<bool> isLightOn = new Subject<bool>();

    public ISubject<bool> IsLightOn
    {
        get
        {
            return this.isLightOn;
        }
    }
private readonly issubject isLightOn=new Subject();
公共ISubject IsLightOn
{
得到
{
把这个还给我;
}
}
备选案文2:

    private readonly ISubject<bool> isLightOn = new Subject<bool>();

    public IObservable<bool> IsLightOnOut
    {
        get
        {
            return this.isLightOn.AsObservable();
        }
    }

    public IObserver<bool> IsLightOnIn
    {
        get
        {
            return this.isLightOn.AsObserver();
        }
    }
private readonly issubject isLightOn=new Subject();
公共IObservable IsLightOnOut
{
得到
{
返回此.isLightOn.AsObservable();
}
}
公共IObserver IsLightOnIn
{
得到
{
返回此.isLightOn.AsObserver();
}
}

哪一个更好,为什么?如果选择2,也欢迎对命名约定有任何想法。

将两个属性分开会给您带来更大的灵活性(“set”可以写入不同的主题),但更大的问题是:您是否希望此类消费者调用
OnCompleted
OnError


如果没有,您应该公开一个写入主题的
SetIsLightOn
方法,并将
IsLightOnValues
公开为一个
IObservable
分隔这两个属性会给您更大的灵活性(“set”可以写入不同的主题),但更大的问题是:您是否希望此类消费者调用
OnCompleted
OnError

如果没有,则应公开写入主题的
SetIsLightOn
方法,并将
IsLightOnValues
公开为
IObservable