Допустим, вы объявили
public delegate void foo(int x);
public static void foo1(int x) { }
public static void foo2(int x) { }
public static void foo3(int x) { }
Теперь вы можете объединить их напрямую с Delegate.Combine
, если вы не против набрать имя делегата дважды:
foo multicast = (foo)Delegate.Combine(new foo[] { foo1, foo2, foo3 });
ИлиВы можете написать универсальную функцию для их объединения, если вы не против набрать имя делегата один раз:
public static T Combine<T>(params T[] del) where T : class
{
return (T)(object)Delegate.Combine((Delegate[])(object[])del);
}
foo multicast2 = Combine<foo>(foo1, foo2, foo3);
Или вы можете написать неуниверсальную функцию для объединения их, если вы не хотите вводитьимя делегата вообще:
public static foo Combine(params foo[] del)
{
return (foo)Delegate.Combine(del);
}
foo multicast3 = Combine(foo1, foo2, foo3);