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();
	}
}