C#和VB中的事件是处理pub/sub的典型语言结构:
public class Publisher
{
public event EventHandler MyEvent;
private void RaiseEvent()
{
EventHandler handler = MyEvent;
if (handler != null)
{
handler(this, EventArgs.Empty);
}
}
}
public class Subscriber
{
public void Subscribe(Publisher pub)
{
pub.MyEvent += MethodToCall;
}
private void MethodToCall(object sender, EventArgs e)
{
// This will be called from Publisher.RaiseEvent
}
}
Run Code Online (Sandbox Code Playgroud)
替代方案包括Reactive Extensions和WPF Commanding.
请注意,如果它Publisher是长寿命但Subscriber应该是短暂的,Subscriber则需要取消订阅事件 - 否则Publisher将保留对事件的引用Subscriber,从而防止垃圾收集.