__try_cast

Примечание   Этот раздел относится только к версии 1 статьи "Управляемые расширения для C++". Приведенный здесь синтаксис должен использоваться только для обслуживания кода версия 1. Сведения об использовании аналогичных функциональных возможностей в новом синтаксисе см. в разделе safe_cast.

Выполняет указанное приведение или вызывает исключение в случае сбоя приведения.

__try_cast < type-id > ( expression )

Заметки

Ключевое слово __try_cast (его поведение аналогично dynamic_cast) обеспечивает поддержку автоматического создания исключения (типа System::InvalidCastException) в случае сбоя указанной операции приведения.

Ключевое слово __try_cast можно использовать на этапе тестирования приложения для автоматического оповещения о возможных ошибках приведения.

При переносе управляемых расширений для C++ следует заменить вызовы __try_cast вызовами safe_cast.

Ключевое слово __try_cast не работает в случае приведения указателя к типам значения (__value), поскольку проверка типов во время выполнения невозможна.

Пример

В следующем примере производится попытка выполнить приведение типа указатель (типа Derived ) к типу другого указателя (типа MoreDerived). В случае сбоя приведения оно перехватывается блоком catch, который выводит сообщение.

// keyword__try_cast.cpp
// compile with: /clr:oldSyntax
#using <mscorlib.dll>
using namespace System;

__gc struct Base {}; 
__gc struct Derived : Base {};
__gc struct MoreDerived : Derived {};

int main() {
   Base*bp = new Derived;
   try {
       MoreDerived* mdp = __try_cast<MoreDerived*>(bp);
   }
   catch(System::InvalidCastException*) {
       Console::WriteLine("Could not cast 'bp' to MoreDerived*");
   }
}

Вывод

Could not cast 'bp' to MoreDerived*