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