Udostępnij za pośrednictwem


safe_cast (C++ Component Extensions)

Operacja safe_cast zwraca określone wyrażenie jako określony typ, jeśli się powiedzie; w przeciwnym wypadku zgłasza InvalidCastException.

Wszystkie czasy wykonania

(Nie ma żadnych uwag dla tej funkcji języka, które mają zastosowanie do wszystkich programów środowiska uruchomienia.)

23b7yy6w.collapse_all(pl-pl,VS.110).gifSkładnia

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

Środowisko wykonawcze systemu Windows

safe_cast umożliwia zmianę typu określonego wyrażenia.W sytuacjach, gdzie w pełni spodziewasz się zmiennej lub parametru, który będzie można konwertować do określonego typu, możesz użyć safe_cast bez bloku try-catch, aby wykryć błędy programowania podczas opracowywania.Aby uzyskać dodatkowe informacje, zobacz Funkcja casting (C++/CX).

23b7yy6w.collapse_all(pl-pl,VS.110).gifSkładnia

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

23b7yy6w.collapse_all(pl-pl,VS.110).gifParametry

  • Identyfikator typu
    Typ, na jaki należy przekonwertować wyrażenie.Dojście do odwołania lub typu wartości, typu wartości lub śledzenie odwołania typu odwołania lub wartości.

  • wyrażenie
    Wyrażenie, które ocenia dojście do odwołania lub typu wartości, typ wartości lub śledzenie odwołania do typu odwołania lub wartości.

23b7yy6w.collapse_all(pl-pl,VS.110).gifUwagi

safe_cast wyrzuca InvalidCastException, jeśli nie może przekonwertować wyrażenia do typu określonego przez identyfikator typu.Aby wychwycić InvalidCastException, określ opcję kompilatora /Eh (Model obsługi wyjątków) i użyj instrukcji try/catch.

23b7yy6w.collapse_all(pl-pl,VS.110).gifWymagania

Opcja kompilatora: /ZW

23b7yy6w.collapse_all(pl-pl,VS.110).gifPrzykłady

Przykład

Poniższy przykład kodu demonstruje, jak używać safe_cast z Środowisko wykonawcze systemu Windows elementami pracy.

// 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);
   }
}

Dane wyjściowe

  

Środowisko uruchomieniowe języka wspólnego

safe_cast pozwala zmienić typ wyrażenia i wygenerować możliwy do zweryfikowania kod MSIL.

23b7yy6w.collapse_all(pl-pl,VS.110).gifSkładnia

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

23b7yy6w.collapse_all(pl-pl,VS.110).gifParametry

  • Identyfikator typu
    Dojście do odwołania lub typu wartości, typu wartości lub śledzenie odwołania typu odwołania lub wartości.

  • wyrażenie
    Wyrażenie, które ocenia dojście do odwołania lub typu wartości, typ wartości lub śledzenie odwołania do typu odwołania lub wartości.

23b7yy6w.collapse_all(pl-pl,VS.110).gifUwagi

Wyrażenie safe_cast<identyfikator typu>(wyrażenie) wyrażenie operand jest konwertowany na obiekt typu identyfikator typu.

Kompilator zaakceptuje static_cast w większości miejsc, które będą akceptować safe_cast.Jednakże safe_cast gwarantowane jest wyprodukowanie weryfikowalnego MSIL,w którym tak static_cast może produkować nieweryfikowalny MSIL.Zobacz Kod czystej i zweryfikowania (C + +/ CLI) i Peverify.exe (PEVerify Tool) aby uzyskać więcej informacji o weryfikowalnym kodzie.

Jak static_cast, safe_cast wywołuje konwersje zdefiniowane przez użytkownika.

Aby uzyskać więcej informacji na temat funkcji cast, zobacz Operatory odlewania.

safe_cast nie dotyczy const_cast (wyłączając const).

safe_cast jest w przestrzeni nazwy cli.Aby uzyskać więcej informacji, zobacz Przestrzeń nazw platformy, domyślna i cli (C++ Component Extensions).

Aby uzyskać więcej informacji na temat funkcji safe_cast, zobacz:

23b7yy6w.collapse_all(pl-pl,VS.110).gifWymagania

Opcja kompilatora: /clr

23b7yy6w.collapse_all(pl-pl,VS.110).gifPrzykłady

Przykład

Przykładem sytuacji, w której kompilator nie zaakceptuje static_cast, ale będzie akceptować safe_cast jest sytuacja, gdy stosowane jest rzutowanie między niepowiązanymi typami interfejsów.W przypadku użycia safe_cast kompilator nie wygeneruje błędu konwersji i wykona sprawdzenie w czasie wykonywania, aby sprawdzić, czy rzutowanie jest możliwe

// 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");
   }
}

Dane wyjściowe

  

Zobacz też

Koncepcje

Składnik rozszerzeń dla platform Runtime