namespace ConsoleApplication1
{
class Program
{
//объявление делегата
delegate void MyDelegate(string s);
// Первый метод, на который мы будем ссылаться при помощи
// делегата. Именно он будет вызывать исключение,
// не позволяющее обратиться ко второму методу.
static void f1(string s)
{
// Выведем значение переданного параметра,
// а также уведомим пользователя о том, что данный
// метод был вызван.
Console.WriteLine("Функция 1 вызвана с параметром = {0}",s);
// Преднамеренно выбросим исключение.
throw new Exception();
}
// Второй метод, на который мы будем ссылаться из делегата.
static void f2(string s)
{
// Сообщим пользователю о том, что метод
// был вызван, а также выведем значение переданного параметра.
Console.WriteLine("Функция 2 вызывана с параметром = {0}",s);
}
static void Main(string[] args)
{
MyDelegate del = new MyDelegate(f1);
// Присоединим к нему еще одну функцию.
del += new MyDelegate(f2);
// Последовательно пройдем по каждому делегату, входящему
// в список вызова ранее созданного делегата.
foreach (MyDelegate d in del.GetInvocationList())
{
// вызов функции - в защищенный блок!
try
{
d("Hello");
}
// Это блок обработки исключений, произошедших
// в защищенном блоке.
catch(Exception ex)
{
// Сообщим пользователю о том, что при попытке
// вызова одной из функций произошло исключение.
Console.WriteLine("Oh mama, была обнаружена исключительная ситуация!");
}
}
Console.ReadKey(); } }}