Skip to content

Instantly share code, notes, and snippets.

@alecmce
Created June 25, 2013 22:07
Show Gist options
  • Save alecmce/5862903 to your computer and use it in GitHub Desktop.
Save alecmce/5862903 to your computer and use it in GitHub Desktop.
An idea for a signal in C#
public class Signal<T>
{
public delegate void SignalDelegate<T>(T data);
event SignalDelegate<T> signal;
List<SignalDelegate<T>> onceDelegates = new List<SignalDelegate<T>>();
public void Bind<T>(SignalDelegate<T> signalDelegate)
{
signal += signalDelegate;
}
public void BindOnce<T>(SignalDelegate<T> signalDelegate)
{
signal += signalDelegate;
onceDelegates.Add(signalDelegate);
}
public void UnBind<T>(SignalDelegate<T> signalDelegate)
{
signal -= signalDelegate;
}
public void Dispatch(T data)
{
injector.binder.Bind<T>().ToValue(data);
signal(data);
injector.binder.Unbind<T>();
foreach (SignalDelegate<T> signalDelegate in onceDelegates)
signal -= signalDelegate;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment