public class MyMulticastDelegate : IEnumerable<Delegate>
{
private Delegate _delegate;
public MyMulticastDelegate()
{
}
public MyMulticastDelegate(Delegate d)
{
_delegate = d;
}
public object Invoke(params object[] args)
{
if(null == _delegate)
return null;
else
return _delegate.DynamicInvoke(args);
}
public MyMulticastDelegate Add(MyMulticastDelegate d)
{
return Add(d._delegate);
}
public MyMulticastDelegate Add(Delegate d)
{
return new MyMulticastDelegate(Delegate.Combine(_delegate, d));
}
public IEnumerator<Delegate> GetEnumerator()
{
if(null != _delegate)
{
foreach(Delegate d in _delegate.GetInvocationList())
yield return d;
}
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}