AsObservable
1. 概要
AsObservable は、ソースの具象型を Observable<T> の背後に隠蔽するオペレーターです。下流のコードがソースを元の具象型にキャストすることを防ぎ、カプセル化を維持します。
2. シグネチャ
デフォルト
csharp
public static Observable<T> AsObservable<T>(
this Observable<T> source)ソースを Observable<T> としてラップし、具象型へのキャストを防止します。
3. マーブルダイアグラム
通知の内容は一切変更されません。型情報のみが 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 を使用してください。