War diese Seite hilfreich?
Ihr Feedback ist uns wichtig. Teilen Sie uns Ihre Meinung mit.
Weiteres Feedback?
1500 verbleibende Zeichen
Exportieren (0) Drucken
Alle erweitern
Dieser Artikel wurde maschinell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen. Weitere Informationen
Übersetzung
Original

IObservable<T>-Schnittstelle

.NET Framework 4.6 and 4.5

Definiert einen Anbieter für Pushbenachrichtigungen.

Namespace:  System
Assembly:  mscorlib (in mscorlib.dll)

public interface IObservable<out T>

Typparameter

out T

Das Objekt, das Benachrichtigungsinformationen bereitstellt.

Dieser Typparameter ist Covariant. Das heißt, Sie können entweder den angegebenen Typ oder einen weiter abgeleiteten Typ verwenden. Weitere Informationen zu Ko- und Kontravarianz finden Sie unter Kovarianz und Kontravarianz in Generika.

Der IObservable<T>-Typ macht die folgenden Member verfügbar.

  NameBeschreibung
Öffentliche MethodeUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsSubscribeBenachrichtigt den Anbieter, dass ein Beobachter Benachrichtigungen empfangen soll.
Zum Seitenanfang

  NameBeschreibung
Öffentliche ErweiterungsmethodeAggregate<TSource>(Func<TSource, TSource, TSource>)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeAggregate<TSource, TAccumulate>(TAccumulate, Func<TAccumulate, TSource, TAccumulate>)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeAll<TSource> (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeAmb<TSource> (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeAnd<TLeft, TRight> (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeAny<TSource>()Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeAny<TSource>(Func<TSource, Boolean>)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeAsObservable<TSource> (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeBufferWithCount<TSource>(Int32)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeBufferWithCount<TSource>(Int32, Int32)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeBufferWithTime<TSource>(TimeSpan)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeBufferWithTime<TSource>(TimeSpan, IScheduler)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeBufferWithTime<TSource>(TimeSpan, TimeSpan)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeBufferWithTime<TSource>(TimeSpan, TimeSpan, IScheduler)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeBufferWithTimeOrCount<TSource>(TimeSpan, Int32)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeBufferWithTimeOrCount<TSource>(TimeSpan, Int32, IScheduler)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeCatch<TSource>(IObservable<TSource>)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeCatch<TSource, TException>(Func<TException, IObservable<TSource>>)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeCombineLatest<TLeft, TRight, TResult> (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeConcat<TSource> (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeContains<TSource>(TSource)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeContains<TSource>(TSource, IEqualityComparer<TSource>)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeCount<TSource> (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeDelay<TSource>(DateTimeOffset)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeDelay<TSource>(TimeSpan)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeDelay<TSource>(DateTimeOffset, IScheduler)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeDelay<TSource>(TimeSpan, IScheduler)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeDistinctUntilChanged<TSource>()Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeDistinctUntilChanged<TSource>(IEqualityComparer<TSource>)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeDistinctUntilChanged<TSource, TKey>(Func<TSource, TKey>)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeDistinctUntilChanged<TSource, TKey>(Func<TSource, TKey>, IEqualityComparer<TKey>)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeDo<TSource>(Action<TSource>)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeDo<TSource>(IObserver<TSource>)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeDo<TSource>(Action<TSource>, Action)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeDo<TSource>(Action<TSource>, Action<Exception>)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeDo<TSource>(Action<TSource>, Action<Exception>, Action)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeFinally<TSource> (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeFirst<TSource> (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeFirstOrDefault<TSource> (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeForkJoin<TLeft, TRight, TResult> (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeGetEnumerator<TSource> (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeGroupBy<TSource, TKey>(Func<TSource, TKey>)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeGroupBy<TSource, TKey>(Func<TSource, TKey>, IEqualityComparer<TKey>)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeGroupBy<TSource, TKey, TElement>(Func<TSource, TKey>, Func<TSource, TElement>)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeGroupBy<TSource, TKey, TElement>(Func<TSource, TKey>, Func<TSource, TElement>, IEqualityComparer<TKey>)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeIsEmpty<TSource> (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeLast<TSource> (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeLastOrDefault<TSource> (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeLatest<TSource> (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeLet<TSource, TResult> (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeLongCount<TSource> (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeMaterialize<TSource> (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeMax<TSource>()Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeMax<TSource>(IComparer<TSource>)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeMaxBy<TSource, TKey>(Func<TSource, TKey>)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeMaxBy<TSource, TKey>(Func<TSource, TKey>, IComparer<TKey>)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeMerge<TSource>(IObservable<TSource>)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeMerge<TSource>(IObservable<TSource>, IScheduler)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeMin<TSource>()Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeMin<TSource>(IComparer<TSource>)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeMinBy<TSource, TKey>(Func<TSource, TKey>)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeMinBy<TSource, TKey>(Func<TSource, TKey>, IComparer<TKey>)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeMostRecent<TSource> (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeNext<TSource> (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeObserveOn<TSource>(Dispatcher)Überladen. (Durch DispatcherObservableExtensions definiert.)
Öffentliche ErweiterungsmethodeObserveOn<TSource>(DispatcherScheduler)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeObserveOn<TSource>(IScheduler)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeObserveOn<TSource>(SynchronizationContext)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeObserveOnDispatcher<TSource> (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeOnErrorResumeNext<TSource> (Durch Observable definiert.)
Öffentliche ErweiterungsmethodePrune<TSource>()Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodePrune<TSource>(IScheduler)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodePrune<TSource, TResult>(Func<IObservable<TSource>, IObservable<TResult>>)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodePrune<TSource, TResult>(Func<IObservable<TSource>, IObservable<TResult>>, IScheduler)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodePublish<TSource>()Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodePublish<TSource>(TSource)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodePublish<TSource>(TSource, IScheduler)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodePublish<TSource, TResult>(Func<IObservable<TSource>, IObservable<TResult>>)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodePublish<TSource, TResult>(Func<IObservable<TSource>, IObservable<TResult>>, TSource)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodePublish<TSource, TResult>(Func<IObservable<TSource>, IObservable<TResult>>, TSource, IScheduler)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeRepeat<TSource>()Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeRepeat<TSource>(Int32)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeReplay<TSource>()Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeReplay<TSource>(Int32)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeReplay<TSource>(IScheduler)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeReplay<TSource>(TimeSpan)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeReplay<TSource>(Int32, IScheduler)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeReplay<TSource>(Int32, TimeSpan)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeReplay<TSource>(TimeSpan, IScheduler)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeReplay<TSource>(Int32, TimeSpan, IScheduler)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeReplay<TSource, TResult>(Func<IObservable<TSource>, IObservable<TResult>>)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeReplay<TSource, TResult>(Func<IObservable<TSource>, IObservable<TResult>>, IScheduler)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeReplay<TSource, TResult>(Func<IObservable<TSource>, IObservable<TResult>>, TimeSpan)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeReplay<TSource, TResult>(Func<IObservable<TSource>, IObservable<TResult>>, Int32)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeReplay<TSource, TResult>(Func<IObservable<TSource>, IObservable<TResult>>, TimeSpan, IScheduler)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeReplay<TSource, TResult>(Func<IObservable<TSource>, IObservable<TResult>>, Int32, IScheduler)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeReplay<TSource, TResult>(Func<IObservable<TSource>, IObservable<TResult>>, Int32, TimeSpan)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeReplay<TSource, TResult>(Func<IObservable<TSource>, IObservable<TResult>>, Int32, TimeSpan, IScheduler)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeRetry<TSource>()Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeRetry<TSource>(Int32)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeRun<TSource>()Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeRun<TSource>(Action<TSource>)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeRun<TSource>(IObserver<TSource>)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeRun<TSource>(Action<TSource>, Action)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeRun<TSource>(Action<TSource>, Action<Exception>)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeRun<TSource>(Action<TSource>, Action<Exception>, Action)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeSample<TSource>(TimeSpan)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeSample<TSource>(TimeSpan, IScheduler)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeScan<TSource>(Func<TSource, TSource, TSource>)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeScan<TSource, TAccumulate>(TAccumulate, Func<TAccumulate, TSource, TAccumulate>)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeScan0<TSource, TAccumulate> (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeSelect<TSource, TResult>(Func<TSource, TResult>)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeSelect<TSource, TResult>(Func<TSource, Int32, TResult>)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeSelectMany<TSource, TResult>(Func<TSource, IObservable<TResult>>)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeSelectMany<TSource, TResult>(Func<TSource, IEnumerable<TResult>>)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeSelectMany<TSource, TOther>(IObservable<TOther>)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeSelectMany<TSource, TResult>(Func<TSource, IObservable<TResult>>, Func<Exception, IObservable<TResult>>, Func<IObservable<TResult>>)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeSelectMany<TSource, TCollection, TResult>(Func<TSource, IObservable<TCollection>>, Func<TSource, TCollection, TResult>)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeSingle<TSource> (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeSingleOrDefault<TSource> (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeSkip<TSource> (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeSkipLast<TSource> (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeSkipUntil<TSource, TOther> (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeSkipWhile<TSource> (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeStartWith<TSource>(TSource[])Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeStartWith<TSource>(IScheduler, TSource[])Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeSubscribe<TSource>()Überladen. (Durch ObservableExtensions definiert.)
Öffentliche ErweiterungsmethodeSubscribe<TSource>(Action<TSource>)Überladen. (Durch ObservableExtensions definiert.)
Öffentliche ErweiterungsmethodeSubscribe<TSource>(Action<TSource>, Action<Exception>)Überladen. (Durch ObservableExtensions definiert.)
Öffentliche ErweiterungsmethodeSubscribe<TSource>(Action<TSource>, Action)Überladen. (Durch ObservableExtensions definiert.)
Öffentliche ErweiterungsmethodeSubscribe<TSource>(Action<TSource>, Action<Exception>, Action)Überladen. (Durch ObservableExtensions definiert.)
Öffentliche ErweiterungsmethodeSubscribeOn<TSource>(Dispatcher)Überladen. (Durch DispatcherObservableExtensions definiert.)
Öffentliche ErweiterungsmethodeSubscribeOn<TSource>(DispatcherScheduler)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeSubscribeOn<TSource>(IScheduler)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeSubscribeOn<TSource>(SynchronizationContext)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeSubscribeOnDispatcher<TSource> (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeSynchronize<TSource>()Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeSynchronize<TSource>(Object)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeTake<TSource>(Int32)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeTake<TSource>(Int32, IScheduler)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeTakeLast<TSource> (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeTakeUntil<TSource, TOther> (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeTakeWhile<TSource> (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeThen<TSource, TResult> (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeThrottle<TSource>(TimeSpan)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeThrottle<TSource>(TimeSpan, IScheduler)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeTimeInterval<TSource>()Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeTimeInterval<TSource>(IScheduler)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeTimeout<TSource>(DateTimeOffset)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeTimeout<TSource>(TimeSpan)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeTimeout<TSource>(DateTimeOffset, IObservable<TSource>)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeTimeout<TSource>(DateTimeOffset, IScheduler)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeTimeout<TSource>(TimeSpan, IObservable<TSource>)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeTimeout<TSource>(TimeSpan, IScheduler)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeTimeout<TSource>(DateTimeOffset, IObservable<TSource>, IScheduler)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeTimeout<TSource>(TimeSpan, IObservable<TSource>, IScheduler)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeTimestamp<TSource>()Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeTimestamp<TSource>(IScheduler)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeToEnumerable<TSource> (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeWhere<TSource>(Func<TSource, Boolean>)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeWhere<TSource>(Func<TSource, Int32, Boolean>)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeZip<TLeft, TRight, TResult>(IEnumerable<TRight>, Func<TLeft, TRight, TResult>)Überladen. (Durch Observable definiert.)
Öffentliche ErweiterungsmethodeZip<TLeft, TRight, TResult>(IObservable<TRight>, Func<TLeft, TRight, TResult>)Überladen. (Durch Observable definiert.)
Zum Seitenanfang

Die IObserver<T>-Schnittstelle und IObservable<T>-Schnittstelle stellen einen verallgemeinerten Mechanismus für pushbasierte Benachrichtigungen bereit, der auch als Beobachterentwurfsmuster bezeichnet wird. Die IObservable<T>-Schnittstelle stellt die Klasse dar, die Benachrichtigungen sendet (der Anbieter); die IObserver<T>-Schnittstelle stellt die Klasse dar, die sie empfängt (der Beobachter). T stellt die Klasse dar, die die Benachrichtigungsinformationen bereitstellt. In einigen pushbasierten Benachrichtigungen können die IObserver<T>-Implementierung und T den gleichen Typ darstellen.

Der Anbieter muss eine einzige Methode implementieren, Subscribe. Diese gibt an, dass ein Beobachter per Push übertragene Benachrichtigungen empfangen will. Aufrufer der Methode übergeben eine Instanz des Beobachters. Die Methode gibt eine IDisposable-Implementierung zurück, die es Beobachtern ermöglicht, jederzeit Benachrichtigungen abzubrechen, bevor der Anbieter aufgehört hat, sie zu senden.

Zu einem beliebigen Zeitpunkt hat ein angegebener Anbieter möglicherweise 0 (null), einen oder mehrere Beobachter. Der Anbieter ist für das Speichern von Verweisen für Beobachter zuständig; außerdem stellt er sicher, dass diese gültig sind, bevor er Benachrichtigungen sendet. Die IObservable<T>-Schnittstelle geht von keinen Annahmen zur Anzahl von Beobachtern oder zur Reihenfolge aus, in der die Benachrichtigungen gesendet werden.

Der Anbieter sendet die folgenden drei Arten von Benachrichtigungen an den Beobachter, indem er IObserver<T>-Methoden aufruft:

  • Die aktuellen Daten. Der Anbieter kann die IObserver<T>.OnNext-Methode aufrufen, um dem Beobachter ein T-Objekt zu übergeben, das aktuelle Daten, geänderte Daten oder neue Daten enthält.

  • Ein Fehlerzustand. Der Anbieter kann die IObserver<T>.OnError-Methode aufrufen, um den Beobachter zu benachrichtigen, dass eine Fehlerbedingung aufgetreten ist.

  • Keine weiteren Daten. Der Anbieter kann die IObserver<T>.OnCompleted-Methode aufrufen, um den Beobachter zu benachrichtigen, dass er aufgehört hat, Benachrichtigungen zu senden.

Im folgenden Beispiel wird das Beobachterentwurfsmuster veranschaulicht. Eine Location-Klasse wird definiert, die Informationen zu Breiten- und Längenkoordinaten enthält.


public struct Location
{
   double lat, lon;

   public Location(double latitude, double longitude)
   {
      this.lat = latitude;
      this.lon = longitude;
   }

   public double Latitude
   { get { return this.lat; } }

   public double Longitude
   { get { return this.lon; } }
}


Die LocationTracker-Klasse stellt die IObservable<T>-Implementierung bereit. Der TrackLocation-Methode wird ein auf NULL festlegbares Location-Objekt übergeben, das die Breiten- und Längendaten enthält. Wenn der Location-Wert nicht null ist, ruft die TrackLocation-Methode die OnNext-Methode jedes Beobachters auf.


public class LocationTracker : IObservable<Location>
{
   public LocationTracker()
   {
      observers = new List<IObserver<Location>>();
   }

   private List<IObserver<Location>> observers;

   public IDisposable Subscribe(IObserver<Location> observer) 
   {
      if (! observers.Contains(observer)) 
         observers.Add(observer);
      return new Unsubscriber(observers, observer);
   }

   private class Unsubscriber : IDisposable
   {
      private List<IObserver<Location>>_observers;
      private IObserver<Location> _observer;

      public Unsubscriber(List<IObserver<Location>> observers, IObserver<Location> observer)
      {
         this._observers = observers;
         this._observer = observer;
      }

      public void Dispose()
      {
         if (_observer != null && _observers.Contains(_observer))
            _observers.Remove(_observer);
      }
   }

   public void TrackLocation(Nullable<Location> loc)
   {
      foreach (var observer in observers) {
         if (! loc.HasValue)
            observer.OnError(new LocationUnknownException());
         else
            observer.OnNext(loc.Value);
      }
   }

   public void EndTransmission()
   {
      foreach (var observer in observers.ToArray())
         if (observers.Contains(observer))
            observer.OnCompleted();

      observers.Clear();
   }
}


Wenn der Location-Wert null ist, instanziiert die TrackLocation-Methode ein LocationNotFoundException-Objekt, das im folgenden Beispiel gezeigt wird. Anschließend wird die OnError-Methode des Beobachters aufgerufen und das LocationNotFoundException-Objekt an sie übergeben. Beachten Sie, dass LocationNotFoundException von Exception abgeleitet ist, aber keine neuen Member hinzufügt.


public class LocationUnknownException : Exception
{
   internal LocationUnknownException() 
   { }
}


Beobachter registrieren sich, um Benachrichtigungen von einem TrackLocation-Objekt durch Aufrufen seiner IObservable<T>.Subscribe-Methode zu erhalten, wodurch einem privaten generischen List<T>-Objekt ein Verweis auf das observer-Objekt zugeordnet wird. Die Methode gibt ein Unsubscriber-Objekt zurück, das eine IDisposable-Implementierung ist, die es Beobachtern ermöglicht, aufzuhören, Benachrichtigungen zu empfangen. Die LocationTracker-Klasse enthält darüber hinaus die EndTransmission-Methode. Wenn keine weiteren Positionsdaten verfügbar sind, ruft die Methode die OnCompleted-Methode jedes Beobachters auf und löscht dann die interne Liste der Beobachter.

In diesem Beispiel stellt die LocationReporter-Klasse die IObserver<T>-Implementierung bereit. Informationen zur aktuellen Position werden in der Konsole angezeigt. Der Konstruktor schließt einen name-Parameter ein, der es ermöglicht, dass die LocationReporter-Instanz sich in der Zeichenfolgenausgabe selbst identifiziert. Außerdem ist eine Subscribe-Methode enthalten, die einen Aufruf der Subscribe-Methode des Anbieters umschließt. Dies ermöglicht es der Methode, den zurückgegebenen IDisposable-Verweis auf eine private Variable zuzuweisen. Die LocationReporter-Klasse schließt auch eine Unsubscribe-Methode ein, die die IDisposable.Dispose-Methode des Objekts aufruft, die von der IObservable<T>.Subscribe-Methode zurückgegeben wird. Der folgende Code definiert die LocationReporter-Klasse.


using System;

public class LocationReporter : IObserver<Location>
{
   private IDisposable unsubscriber;
   private string instName;

   public LocationReporter(string name)
   {
      this.instName = name;
   }

   public string Name
   {  get{ return this.instName; } }

   public virtual void Subscribe(IObservable<Location> provider)
   {
      if (provider != null) 
         unsubscriber = provider.Subscribe(this);
   }

   public virtual void OnCompleted()
   {
      Console.WriteLine("The Location Tracker has completed transmitting data to {0}.", this.Name);
      this.Unsubscribe();
   }

   public virtual void OnError(Exception e)
   {
      Console.WriteLine("{0}: The location cannot be determined.", this.Name);
   }

   public virtual void OnNext(Location value)
   {
      Console.WriteLine("{2}: The current location is {0}, {1}", value.Latitude, value.Longitude, this.Name);
   }

   public virtual void Unsubscribe()
   {
      unsubscriber.Dispose();
   }
}


Im folgenden Code werden dann der Anbieter und der Beobachter instanziiert.


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.


.NET Framework

Unterstützt in: 4.5.2, 4.5.1, 4.5, 4

.NET Framework Client Profile

Unterstützt in: 4

Portable Klassenbibliothek

Unterstützt in: Portable Klassenbibliothek

.NET für Windows Store-Apps

Unterstützt in: Windows 8

.NET für Windows Phone-Apps

Unterstützt in: Windows Phone 8, Silverlight 8.1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core-Rolle wird nicht unterstützt), Windows Server 2008 R2 (Server Core-Rolle wird mit SP1 oder höher unterstützt; Itanium wird nicht unterstützt)

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.

Community-Beiträge

HINZUFÜGEN
Anzeigen:
© 2015 Microsoft