public delegate bool Foo(DateTime timestamp);
Это способ объявления делегата подписью, которую вы описываете. Все делегаты потенциально многоадресные, они просто требуют инициализации. Такие как:
public bool IsGreaterThanNow(DateTime timestamp)
{
return DateTime.Now < timestamp;
}
public bool IsLessThanNow(DateTime timestamp)
{
return DateTime.Now > timestamp;
}
Foo f1 = IsGreaterThanNow;
Foo f2 = IsLessThanNow;
Foo fAll = f1 + f2;
Вызов fAll
, в этом случае вызовет IsGreaterThanNow()
и IsLessThanNow()
.
Чего это не делает, это дает вам доступ к каждому возвращаемому значению. Все, что вы получите, это последнее возвращенное значение. Если вы хотите получить каждое значение, вам придется обрабатывать многоадресную передачу вручную следующим образом:
List<bool> returnValues = new List<bool>();
foreach(Foo f in fAll.GetInvocationList())
{
returnValues.Add(f(timestamp));
}