__try_cast
メモ このトピックは、C++ マネージ拡張のバージョン 1 にのみ対応しています。 この構文は、バージョン 1 のコードを保守するためだけに使用してください。 新しい構文で同等の機能を使用する方法については、「safe_cast (C++ コンポーネント拡張)」を参照してください。
指定したキャストを実行します。キャストが失敗した場合は、例外をスローします。
__try_cast < type-id > ( expression )
解説
(dynamic_cast に似た動作をする) __try_cast キーワードは、指定されたキャスト操作が失敗するたびに、(System::InvalidCastException 型の) 例外を自動的にスローするためのサポートを提供します。
__try_cast キーワードは、アプリケーションのテスト フェーズで使用でき、考えられるキャストの失敗を自動的に警告します。
C++ のマネージ拡張を移植するときは、__try_cast の呼び出しを safe_cast (C++ コンポーネント拡張) に置き換えます。
実行時に型をチェックすることはできないため、__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*