__try_cast
本主题仅适用于托管扩展的 1 版 C++ 的说明。 只应在此语法维护 1 版代码。 有关使用等效功能的信息在新语法,请参见 safe_cast 。
,如果转换失败,执行指定的转换或引发异常。
__try_cast < type-id > ( expression )
备注
__try_cast 关键字 (类似在行为与 dynamic_cast) 提供自动引发异常支持 (类型 系统:: 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*