__try_cast
發佈時間: 2016年4月
注意:本主題只適用於 Managed Extensions for C++ 第 1 版。 這個語法只可用於維護第 1 版的程式碼。 請參閱 safe_cast (C++ Component Extensions) 如需新語法中使用的相同功能。
如果轉型失敗,會執行指定的轉型或擲回例外狀況。
語法
__try_cast <
type-id
>
(
expression
)
備註
__try_cast 關鍵字 (與 dynamic_cast 的行為類似) 支援在指定的轉型作業失敗時自動擲回例外狀況 (屬於類型 System::InvalidCastException)。
應用程式測試階段可以使用 __try_cast 關鍵字自動提醒您注意可能發生的轉型失敗。
當移植 Managed Extensions for c + +,來取代 __try_cast 呼叫 safe_cast (C++ Component Extensions)。
因為在執行階段無法檢查類型,因此 __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*