Skip to content

AsObservable

1. 概要

AsObservable は、ソースの具象型を Observable<T> の背後に隠蔽するオペレーターです。下流のコードがソースを元の具象型にキャストすることを防ぎ、カプセル化を維持します。

2. シグネチャ

デフォルト

csharp
public static Observable<T> AsObservable<T>(
    this Observable<T> source)

ソースを Observable<T> としてラップし、具象型へのキャストを防止します。

3. マーブルダイアグラム

AsObservable のマーブルダイアグラム

通知の内容は一切変更されません。型情報のみが Observable<T> に隠蔽されます。

4. サンプルコード

csharp
var subject = new Subject<int>();

// Subject を Observable<T> として公開
// 外部から OnNext() を呼び出せなくなる
Observable<int> observable = subject.AsObservable();

observable.Subscribe(x => Console.WriteLine($"値: {x}"));

// 以下のキャストは失敗する(型が隠蔽されている)
// var castBack = (Subject<int>)observable; // 不可

// クラス内で Subject をプライベートに保持し、外部には Observable として公開
public class MyService
{
    private readonly Subject<string> _events = new();

    // 外部からは Observable<string> としてのみアクセス可能
    public Observable<string> Events => _events.AsObservable();

    public void RaiseEvent(string message) => _events.OnNext(message);
}

5. 補足

R3 の型システム内で型を隠蔽するには AsObservable を使用します。標準 .NET の System.IObservable<T> に変換する必要がある場合は AsSystemObservable を使用してください。