__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*