Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>Here's a modification of MSDN example to fit your framework:</p> <pre><code> public struct Message { string text; public Message(string newText) { this.text = newText; } public string Text { get { return this.text; } } } public class Headquarters : IObservable&lt;Message&gt; { public Headquarters() { observers = new List&lt;IObserver&lt;Message&gt;&gt;(); } private List&lt;IObserver&lt;Message&gt;&gt; observers; public IDisposable Subscribe(IObserver&lt;Message&gt; observer) { if (!observers.Contains(observer)) observers.Add(observer); return new Unsubscriber(observers, observer); } private class Unsubscriber : IDisposable { private List&lt;IObserver&lt;Message&gt;&gt; _observers; private IObserver&lt;Message&gt; _observer; public Unsubscriber(List&lt;IObserver&lt;Message&gt;&gt; observers, IObserver&lt;Message&gt; observer) { this._observers = observers; this._observer = observer; } public void Dispose() { if (_observer != null &amp;&amp; _observers.Contains(_observer)) _observers.Remove(_observer); } } public void SendMessage(Nullable&lt;Message&gt; loc) { foreach (var observer in observers) { if (!loc.HasValue) observer.OnError(new MessageUnknownException()); else observer.OnNext(loc.Value); } } public void EndTransmission() { foreach (var observer in observers.ToArray()) if (observers.Contains(observer)) observer.OnCompleted(); observers.Clear(); } } public class MessageUnknownException : Exception { internal MessageUnknownException() { } } public class Inspector : IObserver&lt;Message&gt; { private IDisposable unsubscriber; private string instName; public Inspector(string name) { this.instName = name; } public string Name { get { return this.instName; } } public virtual void Subscribe(IObservable&lt;Message&gt; provider) { if (provider != null) unsubscriber = provider.Subscribe(this); } public virtual void OnCompleted() { Console.WriteLine("The headquarters has completed transmitting data to {0}.", this.Name); this.Unsubscribe(); } public virtual void OnError(Exception e) { Console.WriteLine("{0}: Cannot get message from headquarters.", this.Name); } public virtual void OnNext(Message value) { Console.WriteLine("{1}: Message I got from headquarters: {0}", value.Text, this.Name); } public virtual void Unsubscribe() { unsubscriber.Dispose(); } } public class Program { public static void Main(string[] args) { Inspector inspector1 = new Inspector("Greg Lestrade"); Inspector inspector2 = new Inspector("Sherlock Holmes"); Headquarters headquarters = new Headquarters(); inspector1.Subscribe(headquarters); inspector2.Subscribe(headquarters); headquarters.SendMessage(new Message("Catch Moriarty!")); headquarters.EndTransmission(); Console.ReadKey(); } } </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload