__try_cast
注意 本主题仅适用于 C++ 托管扩展的版本 1。 此语法应仅用于维护版本 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*