當前位置: 首頁>>代碼示例>>C#>>正文


C# IObservable<T>接口代碼示例

本文整理匯總了C#中System.IObservable<T>接口的典型用法代碼示例。如果您正苦於以下問題:C# IObservable<T>接口的具體用法?C# IObservable<T>怎麽用?C# IObservable<T>使用的例子?那麽, 這裏精選的接口代碼示例或許可以為您提供幫助。


IObservable<T>接口屬於System命名空間,在下文中一共展示了IObservable<T>接口的5個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的C#代碼示例。

示例1: Location

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; } }
}
開發者ID:.NET開發者,項目名稱:System,代碼行數:16,代碼來源:IObservable

示例2: LocationTracker

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();
   }
}
開發者ID:.NET開發者,項目名稱:System,代碼行數:53,代碼來源:IObservable

示例3: LocationUnknownException

public class LocationUnknownException : Exception
{
   internal LocationUnknownException() 
   { }
}
開發者ID:.NET開發者,項目名稱:System,代碼行數:5,代碼來源:IObservable

示例4: LocationReporter

//引入命名空間
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();
   }
}
開發者ID:.NET開發者,項目名稱:System,代碼行數:43,代碼來源:IObservable

示例5: Main

//引入命名空間
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();
   }
}
開發者ID:.NET開發者,項目名稱:System,代碼行數:21,代碼來源:IObservable

輸出:

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.


注:本文中的System.IObservable<T>接口示例由純淨天空整理自Github/MSDocs等開源代碼及文檔管理平台,相關代碼片段篩選自各路編程大神貢獻的開源項目,源碼版權歸原作者所有,傳播和使用請參考對應項目的License;未經允許,請勿轉載。