Поделиться через


__try_cast

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

Выполняет заданное 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*");
   }
}

Output

Could not cast 'bp' to MoreDerived*