Прежде всего, небольшое предисловие.CLR позволяет выбрасывать экземпляр любого типа в качестве исключения;например, можно бросить System.String
или даже System.Windows.Forms.Form
объект.Тем не менее, компилятор C # позволяет генерировать только объекты, производные от Exception.Таким образом, единственный способ отловить исключение, не совместимое с CLS, состояло в том, чтобы в вашем коде был пустой блок catch()
.
До версии 2.0 в CLR были непустые блоки захвата (т. Е. catch (Exception ...)
)отлавливать только CLS-совместимые исключения.Но в версии 2.0 CLR Microsoft ввела новый класс RuntimeWrappedException
, чтобы при возникновении исключения, не совместимого с CLS (например, из другого языка), CLR автоматически создавал экземпляр класса RuntimeWrappedException.С тех пор больше нет необходимости иметь пустые блоки перехвата (т.е. catch()
), потому что catch (Exception )
перехватит все исключение в любом случае.
Надеюсь, что это проливает некоторый свет.1015 * Для получения дополнительной информации я могу обратиться к замечательной книге Джефри Рихтера " CLR via C # ", третье издание которой уже в продаже.