class TestDelegate { public delegate void EventHanding(); public event EventHanding OnFireEvnet; protected void RegistEvent() { Delegate d1 = new EventHanding(test1); Delegate d2 = new EventHanding(test2); Delegate d3 = new EventHanding(test3); Delegate d4 = new EventHanding(test4); Delegate newEvent1 = Delegate.Combine(d1, d2); Delegate newEvent2 = Delegate.Combine(d3, d4); //新合并的委托是一个新的对象 if (Object.ReferenceEquals(d2, newEvent1)) { string str = string.Empty; } if (d2.Method.ToString().CompareTo(newEvent1.Method.ToString())==0) { string str = string.Empty; } EventHanding newEvent = (EventHanding)Delegate.Combine(newEvent1, newEvent2); OnFireEvnet += newEvent; } protected void FireEvent() { //单波 MulticastDelegate del = (MulticastDelegate)OnFireEvnet; del.Method.Invoke(this, null); //多波 OnFireEvnet(); } int i = 0; public void test1() { i++; } public void test2() { i++; } public void test3() { i++; } public void test4() { i++; } public static void Test() { TestDelegate test = new TestDelegate(); test.RegistEvent(); test.FireEvent(); } }