System.IObservable 接口

方法描述

定义基于推送的通知的提供程序。

语法定义(C# System.IObservable 接口 的用法)

public interface IObservable

构造函数

构造函数名称 构造函数描述

成员/方法

方法名称 方法描述
Subscribe 通知提供程序:某观察程序将要接收通知。

提示和注释

IObserver 和 IObservable 接口为基于推送的通知提供通用机制,也称为观察者设计模式。。 IObservable 接口表示发送通知(提供程序)的类;IObserver 接口表示接收通知(观察器)的类。 T 表示提供通知信息的类。 在某些基于推送的通知中,IObserver 实现和 T 可以表示相同的类型。

该提供程序必须实现一个方法 Subscribe,指出某个观察器要接收基于推送的通知。 该方法的调用方传递观察器的实例。 方法返回 IDisposable 实现,其可让观察程序在提供程序已停止发送它们的任意时间之前取消通知。

在任何给定时间,给定的提供程序可能具有零个、一个或多个观察器。 该提供程序负责存储对观察器的引用,并且在发送通知之前确保它们有效。 IObservable 接口对于观察器的个数或发送通知的顺序不作任何假设。

该提供程序通过调用 IObserver 方法向观察器发送以下三种通知:

当前数据。 提供程序可以调用 IObserver.OnNext 方法来为观察器传递包含当前数据、更改的数据或全新数据的 T 对象。

一个异常情况。 提供程序可以调用 IObserver.OnError 方法来通知观察器出现了某种错误情况。

没有进一步的数据。 提供程序可以调用 IObserver.OnCompleted 方法来通知观察器它已经完成通知的发送。

System.IObservable 接口例子

下面的代码然后实例化提供程序和观察器。

using System;

class Program
{
   static void Main(string[] args)
   {
      // Define a provider and two observers.
      LocationTracker provider = new LocationTracker();
      LocationReporter reporter1 = new LocationReporter("FixedGPS");
      reporter1.Subscribe(provider);
      LocationReporter reporter2 = new LocationReporter("MobileGPS");
      reporter2.Subscribe(provider);

      provider.TrackLocation(new Location(47.6456, -122.1312));
      reporter1.Unsubscribe();
      provider.TrackLocation(new Location(47.6677, -122.1199));
      provider.TrackLocation(null);
      provider.EndTransmission();
   }
}
// The example displays output similar to the following:
//      FixedGPS: The current location is 47.6456, -122.1312
//      MobileGPS: The current location is 47.6456, -122.1312
//      MobileGPS: The current location is 47.6677, -122.1199
//      MobileGPS: The location cannot be determined.
//      The Location Tracker has completed transmitting data to MobileGPS.

继承层次结构

命名空间

namespace: System

程序集: mscorlib(在 mscorlib.dll 中)

线程安全

版本信息

.NET Framework 受以下版本支持:4 .NET Framework Client Profile 受以下版本支持:4

适用平台

Windows 7, Windows Vista SP1 或更高版本, Windows XP SP3, Windows Server 2008(不支持服务器核心), Windows Server 2008 R2(支持 SP1 或更高版本的服务器核心), Windows Server 2003 SP2 .NET Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表,请参见.NET Framework 系统要求。