当前位置: 首页>>代码示例>>C#>>正文


C# IObserver<T>接口代码示例

本文整理汇总了C#中System.IObserver<T>接口的典型用法代码示例。如果您正苦于以下问题:C# IObserver<T>接口的具体用法?C# IObserver<T>怎么用?C# IObserver<T>使用的例子?那么恭喜您, 这里精选的接口代码示例或许可以为您提供帮助。


IObserver<T>接口属于System命名空间,在下文中一共展示了IObserver<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,代码来源:IObserver

示例2: 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,代码来源:IObserver

示例3: 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,代码来源:IObserver

示例4: LocationUnknownException

public class LocationUnknownException : Exception
{
   internal LocationUnknownException() 
   { }
}
开发者ID:.NET开发者,项目名称:System,代码行数:5,代码来源:IObserver

示例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,代码来源:IObserver

输出:

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.IObserver<T>接口示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。