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

Operacja safe_cast zwraca określone wyrażenie jako określony typ, jeśli pomyślne; w przeciwnym razie zgłasza InvalidCastException .The safe_cast operation returns the specified expression as the specified type, if successful; otherwise, throws InvalidCastException.

Wszystkie środowiska wykonawczeAll Runtimes

(Nie ma żadnych uwag dla tej funkcji języka, które mają zastosowanie do wszystkich środowisk uruchomieniowych).(There are no remarks for this language feature that apply to all runtimes.)

SkładniaSyntax

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

Środowisko wykonawcze systemu WindowsWindows Runtime

safe_cast pozwala zmienić typ określonego wyrażenia.safe_cast allows you to change the type of a specified expression. W sytuacjach, w których w pełni oczekuje się, że zmienna lub parametr mają być konwertowane do pewnego typu, można użyć safe_cast bez bloku try-catch do wykrywania błędów programistycznych podczas opracowywania.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. Aby uzyskać więcej informacji, zobacz rzutowanie (C++/CX).For more information, see Casting (C++/CX).

SkładniaSyntax

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

ParametryParameters

Identyfikator typutype-id
Typ, do którego ma zostać przekształcone wyrażenie .The type to convert expression to. Dojście do typu odwołania lub wartości, typ wartości lub odwołanie śledzące do typu odwołania lub wartości.A handle to a reference or value type, a value type, or a tracking reference to a reference or value type.

expressionexpression
Wyrażenie, które oblicza do dojścia do typu odwołania lub wartości, typu wartości lub odwołania śledzenia do typu odwołania lub wartości.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.

UwagiRemarks

safe_cast zgłasza InvalidCastException , jeśli nie można przekonwertować wyrażenia na typ określony przez Identyfikator typu. Aby przechwytywać InvalidCastException , określ opcję kompilatora /EH (model obsługi wyjątków) i użyj instrukcji 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.

WymaganiaRequirements

Opcja kompilatora: /ZWCompiler option: /ZW

PrzykładyExamples

Poniższy przykład kodu demonstruje, jak używać safe_cast z środowisko wykonawcze systemu Windows.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

środowiska uruchomieniowe w trakcie wykonaniaCommon Language Runtime

safe_cast pozwala zmienić typ wyrażenia i wygenerować zweryfikowany kod MSIL.safe_cast allows you to change the type of an expression and generate verifiable MSIL code.

SkładniaSyntax

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

ParametryParameters

Identyfikator typutype-id
Dojście do typu odwołania lub wartości, typ wartości lub odwołanie śledzące do typu odwołania lub wartości.A handle to a reference or value type, a value type, or a tracking reference to a reference or value type.

expressionexpression
Wyrażenie, które oblicza do dojścia do typu odwołania lub wartości, typu wartości lub odwołania śledzenia do typu odwołania lub wartości.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.

UwagiRemarks

Wyrażenie safe_cast< identyfikatora typu wyrażenia >( ) konwertuje wyrażenie operandu na obiekt typu Type -ID.The expression safe_cast<type-id>(expression) converts the operand expression to an object of type type-id.

Kompilator przyjmie static_cast w większości przypadków, gdy zostanie zaakceptowany safe_cast.The compiler will accept a static_cast in most places that it will accept a safe_cast. Niemniej jednak safe_cast ma na celu wygenerowanie zweryfikowanego MSIL, gdzie static_cast może utworzyć niemożliwy do sprawdzenia MSIL.However, safe_cast is guaranteed to produce verifiable MSIL, where as a static_cast could produce unverifiable MSIL. Aby uzyskać więcej informacji na temat kodu możliwego do zweryfikowania, zobacz czysty i możliwy do zweryfikowania kod (C++/CLI) i Peverify.exe (narzędzie PEVerify) .See Pure and Verifiable Code (C++/CLI) and Peverify.exe (PEVerify Tool) for more information on verifiable code.

Podobnie static_cast jak safe_cast wywołuje konwersje zdefiniowane przez użytkownika.Like static_cast, safe_cast invokes user-defined conversions.

Aby uzyskać więcej informacji na temat rzutowania, zobacz Operatory rzutowania.For more information about casts, see Casting Operators.

safe_cast nie ma zastosowania a const_cast (odłożenie const ).safe_cast does not apply a const_cast (cast away const).

safe_cast znajduje się w przestrzeni nazw interfejsu wiersza polecenia.safe_cast is in the cli namespace. Aby uzyskać więcej informacji , zobacz przestrzenie nazw platform, Default i CLI .See Platform, default, and cli Namespaces for more information.

Aby uzyskać więcej informacji na temat safe_cast, zobacz:For more information on safe_cast, see:

WymaganiaRequirements

Opcja kompilatora: /clrCompiler option: /clr

PrzykładyExamples

Przykład, w którym kompilator nie akceptuje, static_cast ale akceptuje safe_cast jest dla rzutowania między niepowiązanymi typami interfejsów.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. W przypadku safe_cast kompilator nie będzie wystawiał błędu konwersji i wykona sprawdzenie w czasie wykonywania, aby sprawdzić, czy Rzutowanie jest możliweWith 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

Zobacz teżSee also

Rozszerzenia składników dla platform .NET i platformy UWPComponent Extensions for .NET and UWP