safe_cast (C++/CLI et C++/CX)safe_cast (C++/CLI and C++/CX)

L’opération safe_cast retourne l’expression spécifiée en tant que type spécifié, en cas de réussite ; sinon, lève une exception InvalidCastException.The safe_cast operation returns the specified expression as the specified type, if successful; otherwise, throws InvalidCastException.

Tous les runtimesAll Runtimes

(Aucune remarque pour cette fonctionnalité de langage ne s’applique à tous les runtimes.)(There are no remarks for this language feature that apply to all runtimes.)

SyntaxeSyntax

[default]:: safe_cast< type-id >( expression )

Windows RuntimeWindows Runtime

safe_cast vous permet de modifier le type d’une expression spécifiée.safe_cast allows you to change the type of a specified expression. Dans les situations où vous vous attendez à ce qu’une variable ou un paramètre soit convertible en un certain type, vous pouvez utiliser safe_cast sans bloc try-catch pour détecter les erreurs de programmation pendant le développement.In situations where you fully expect a variable or parameter to be convertible to a certain type, you can use safe_cast without a try-catch block to detect programming errors during development. Pour plus d’informations, consultez Cast (C++/CX).For more information, see Casting (C++/CX).

SyntaxeSyntax

[default]:: safe_cast< type-id >( expression )

ParamètresParameters

ID de typetype-id
Type vers lequel convertir une expression.The type to convert expression to. Handle vers un type référence ou valeur, type valeur ou référence de suivi à un type référence ou valeur.A handle to a reference or value type, a value type, or a tracking reference to a reference or value type.

expressionexpression
Expression qui s'évalue en handle vers un type référence ou type valeur, type valeur ou référence de suivi vers un type référence ou valeur.An expression that evaluates to a handle to a reference or value type, a value type, or a tracking reference to a reference or value type.

NotesRemarks

safe_cast lève InvalidCastException une exception s’il ne peut pas convertir l' expression en type spécifié par l' ID de type. Pour intercepter InvalidCastException , spécifiez l’option du compilateur /Eh (Exception Handling Model) et utilisez une instruction try/catch .safe_cast throws InvalidCastException if it cannot convert expression to the type specified by type-id. To catch InvalidCastException, specify the /EH (Exception Handling Model) compiler option, and use a try/catch statement.

SpécificationsRequirements

Option du compilateur : /ZWCompiler option: /ZW

ExemplesExamples

L’exemple de code suivant présente comment utiliser safe_cast avec Windows Runtime.The following code example demonstrates how to use safe_cast with the Windows Runtime.

// safe_cast_ZW.cpp
// compile with: /ZW /EHsc

using namespace default;
using namespace Platform;

interface class I1 {};
interface class I2 {};
interface class I3 {};

ref class X : public I1, public I2 {};

int main(Array<String^>^ args) {
   I1^ i1 = ref new X;
   I2^ i2 = safe_cast<I2^>(i1);   // OK, I1 and I2 have common type: X
   // I2^ i3 = static_cast<I2^>(i1);   C2440 use safe_cast instead
   try {
      I3^ i4 = safe_cast<I3^>(i1);   // Fails because i1 is not derived from I3.
   }
   catch(InvalidCastException^ ic) {
   wprintf(L"Caught expected exception: %s\n", ic->Message);
   }
}
Caught expected exception: InvalidCastException

Common Language RuntimeCommon Language Runtime

safe_cast vous permet de modifier le type d’une expression et de générer du code MSIL vérifiable.safe_cast allows you to change the type of an expression and generate verifiable MSIL code.

SyntaxeSyntax

[cli]:: safe_cast< type-id >( expression )

ParamètresParameters

ID de typetype-id
Handle vers un type référence ou valeur, type valeur ou référence de suivi à un type référence ou valeur.A handle to a reference or value type, a value type, or a tracking reference to a reference or value type.

expressionexpression
Expression qui s'évalue en handle vers un type référence ou type valeur, type valeur ou référence de suivi vers un type référence ou valeur.An expression that evaluates to a handle to a reference or value type, a value type, or a tracking reference to a reference or value type.

NotesRemarks

L’expression safe_cast< d' ID de type expression >( ) convertit l' expression d’opérande en un objet de type type-ID.The expression safe_cast<type-id>(expression) converts the operand expression to an object of type type-id.

Le compilateur accepte un static_cast à la plupart des emplacements auxquels il accepte un safe_cast.The compiler will accept a static_cast in most places that it will accept a safe_cast. Toutefois, safe_cast garantit la génération de code MSIL vérifiable, où static_cast peut produire du code MSIL non vérifiable.However, safe_cast is guaranteed to produce verifiable MSIL, where as a static_cast could produce unverifiable MSIL. Voir Code pur et vérifiable (C++/CLI) et Peverify.exe (Outil PEVerify) pour plus d’informations sur le code vérifiable.See Pure and Verifiable Code (C++/CLI) and Peverify.exe (PEVerify Tool) for more information on verifiable code.

Comme static_cast , safe_cast appelle des conversions définies par l’utilisateur.Like static_cast, safe_cast invokes user-defined conversions.

Pour plus d’informations sur les casts, consultez Opérateurs de casting.For more information about casts, see Casting Operators.

safe_cast n’applique pas de const_cast (Cast absent const ).safe_cast does not apply a const_cast (cast away const).

safe_cast est dans l’espace de noms cli.safe_cast is in the cli namespace. Consultez Plateforme, valeur par défaut et espaces de noms cli pour plus d’informations.See Platform, default, and cli Namespaces for more information.

Pour plus d’informations sur safe_cast, consultez :For more information on safe_cast, see:

SpécificationsRequirements

Option du compilateur : /clrCompiler option: /clr

ExemplesExamples

Voici un exemple de l’endroit où le compilateur n’accepte pas, static_cast mais accepte un safe_cast pour les conversions entre les types d’interface non liés.One example of where the compiler will not accept a static_cast but will accept a safe_cast is for casts between unrelated interface types. Avec safe_cast, le compilateur n’émet pas d’erreur de conversion et effectue une vérification au moment de l’exécution si le cast est possible.With safe_cast, the compiler will not issue a conversion error and will perform a check at runtime to see if the cast is possible

// safe_cast.cpp
// compile with: /clr
using namespace System;

interface class I1 {};
interface class I2 {};
interface class I3 {};

ref class X : public I1, public I2 {};

int main() {
   I1^ i1 = gcnew X;
   I2^ i2 = safe_cast<I2^>(i1);   // OK, I1 and I2 have common type: X
   // I2^ i3 = static_cast<I2^>(i1);   C2440 use safe_cast instead
   try {
      I3^ i4 = safe_cast<I3^>(i1);   // fail at runtime, no common type
   }
   catch(InvalidCastException^) {
      Console::WriteLine("Caught expected exception");
   }
}
Caught expected exception

Voir aussiSee also

Extensions de composant pour .NET et UWPComponent Extensions for .NET and UWP